先给出一条结论,然后我们在用代码来证明这个结论吧,$arrtmp=$arr;在这个赋值表达式中我把$arr叫做赋值数组,把$arrtmp叫做被赋值数组,数组在赋值时,如果赋值数组的数组指针已经指向了数组末尾,则赋值之后赋值数组的数组指针会被重置,指向数组第一个元素,如果在赋值时,赋值数组的数组指针没有指向数组末尾,而是指向了任何一个有效的数组元素,那么在赋值之后赋值数组的数组指针是不会被重置的,而是保留其原来指向的元素.

在赋值之后,被赋值数组不仅有了赋值数组的值,而且赋值数组的数组指针指向了那个元素,被赋值的数组也会指向自己中值相同的那个元素.

demo1实例代码如下:

$arr=array('var1'=>1,'var2'=>2,'var3'=>3,'var4'=>4,'var5'=>5);

while( list($key,$value) = each($arr) )

{

if($value== 4)break;

}

var_dump(current($arr));

$arr1=$arr;

var_dump(current($arr));

var_dump(current($arr1));

?>

demo1 的执行结果是:int(5) int(5) int(5),从这个结果可以看出,赋值前后$arr的数组指针位置没有发生任何变化,$arr1不仅值跟$arr相同,而且数组指针所指向的元素值也是相同的。现在 用上述结论来解释这个结果,在while循环中,有一个if判断语句,目的是不让$arr的数组指针指向数组末尾,而是保留在一个有效的位置,在$value=4时会跳出循环,而each这个函数会将数组指针向前移动一位,这就导致了$arr的数组指针指向了第5个元素,所以在赋值之 前,current($arr)的结果是5,赋值之后,由于在赋值之前$arr的当前指针并没有指向末尾,因此在赋值之后不会将$arr的数组指针进行重置,而是保留了其原有的位置,因此在赋值之后使用current($arr)的结果仍然是5,赋值时$arr1不仅获得了$arr的值,而且数组指针指向的元素和$arr的相同,二者都是5.

demo2实例代码如下:

$arr=array('var1'=>1,'var2'=>2,'var3'=>3,'var4'=>4,'var5'=>5);

while( list($key,$value) = each($arr) )

{

//if($value == 4) break;

}

var_dump(current($arr));

$arr1=$arr;

var_dump(current($arr));

var_dump(current($arr1));

?>

demo2中我们将 if($value == 4) break; 这一句注释掉了,目的很简单,就是通过each将$arr的数组指针位置指向数组末尾.

demo2 的执行结果:bool(false) int(1) bool(false),如果数组指针对应的元素为0,“”,或者不是一个有效的值时,current函数会返回false,$arr的值中没有为0或者“”的情况,因此可以断定是因为数组指针指向了一个无效的元素而导致current返回了一个false。

换句话说就是可以确定在while循环完成之后,$arr的数组指针已经指向了数组的末尾。所以我们看到在赋值之前current($arr)的值是false,而赋值之后current($arr)的值变成了1,说明赋值 之后$arr的数组指针被重置了,指向了数组的第一个元素.current($arr1)的值为false,说明赋值之后$arr1让然保留了赋值之 前$arr的数组指针指向的元素.

不知道描述清楚没有,还是将工作中问题简化一下,用下面代码说明一下吧.

$arr=array('var1'=>1,'var2'=>2,'var3'=>3,'var4'=>4,'var5'=>5);

while( list($key,$value) = each($arr) )

{

$$key=$value;

}

//下面这一步操作很关键,问题就出在这里,遍历完之后,对数组添加一个值。

$arr['var6'] = 6;

func($arr);

functionfunc($arrtmp)

{

while(list($key,$value) = each($arrtmp) )

{

$$key=$value;

}

var_dump($var1);

var_dump($var2);

var_dump($var3);

var_dump($var4);

var_dump($var5);

var_dump($var6);

}

?>

//输出结果:NULL NULL NULL NULL NULL int(6).

php数组指针什么用,php数组指针用法详解相关推荐

  1. c++智能指针用法详解

    随笔 - 209   文章 - 2   评论 - 174 c++ 智能指针用法详解 本文介绍c++里面的四个智能指针: auto_ptr, shared_ptr, weak_ptr, unique_p ...

  2. js数组中foEach和map的用法详解 jq中的$.each和$.map

    数组中foEach和map的用法详解 相同点: 1.都是循环遍历数组(仅仅是数组)中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项value, ...

  3. this指针的用法详解

    C++中this指针的用法详解 2010-11-12 20:40:45 分类: C/C++ this指针的用处: 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果.th ...

  4. this指针用法详解

    C++中this指针的用法详解 2010-11-12 20:40:45 分类: C/C++ 1. this指针的用处: 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果 ...

  5. php 合并数组对象,JS内数组合并方法与对象合并实现步骤详解

    这次给大家带来JS内数组合并方法与对象合并实现步骤详解,JS内数组合并方法与对象合并实现的注意事项有哪些,下面就是实战案例,一起来看一下. 1 数组合并 1.1 concat 方法var a=[1,2 ...

  6. Python中数组切片的用法详解

    Python中数组切片的用法详解 一.python中"::-1"代表什么? 二.python中":"的用法 三.python中数组切片 三.numpy中的整数数 ...

  7. C-指针,二级指针,二维数组作为函数参数使用,C语言链表(详解)

    一级指针 int *p;            //表示定义一个int型(4字节)的指针p &p                 //表示p自身的地址位置 p                  ...

  8. 指针详讲(一阶指针和二阶指针等指针各种用法详解)

    首先,大家好,我是大家的超级无敌帅的代码老师. 给大家分享一段话: "登顶之路注定坎坷: 哈哈哈哈,不管是学习还是生活,咱们得去看看山顶的风景啊!" 话不多说,咱们开干! 一:指针 ...

  9. 【转】C++中this指针的用法详解

    1.this指针的用处 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果.this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象 ...

最新文章

  1. 高斯回归过程应用例子
  2. java 线程池 初始大小,Java线程池ThreadPoolExecutor的实现和参数
  3. 边缘计算:5G 时代的万亿市场
  4. linux用户变量设置位置,linux---位置参数
  5. 创建代码生成器可以很简单:如何通过T4模板生成代码?[下篇]
  6. STM32PB2(BOOT1)使用注意
  7. 转答寒冬的面试题(1)
  8. 解决GetManifestResourceNames()无法读取资源文件
  9. 马云:未来无工可打,人工智能发展红利还在10年以后
  10. 矩阵快速幂各类题型总结(一般,共轭,1 * n, 矩阵简化)
  11. Kafka分区原理图
  12. 基于Geoserver配置多图层地图以及利用uDig来进行样式配置
  13. 如何生成密钥文件Snk
  14. For A, B such that AB is square, prove trAB = trBA.
  15. qt webview 忽略 ssl错误 ignoreSslErrors
  16. Graphics2D 详细应用秘籍
  17. java后台将数据导出到Excel表格
  18. 手机服务器 微信QQ,玩家天价买服务器语聊开黑 小白没想明白:微信QQ难道不行?...
  19. HMAC-SHA1加密算法c++与java的实现
  20. java 新功能_最新的Java版本101有什么新功能?

热门文章

  1. Verilog中memory数据类型
  2. centos下忘记mysql密码_CentOS下忘记mysql密码的解决办法
  3. 将声音转为图片(二维矩阵)
  4. 百度AI生态方法论升级,AI开放平台深入7大细分领域
  5. Kafka-0.10.0.0 集群高可靠实验
  6. Infortrend推出超大容量存储解决方案
  7. 在服务器虚拟化架构中有哪些技术功能和益处
  8. 【翻译】关于回调地狱
  9. Nginx 动静态访问分离
  10. python正态分布相关函数