关于 将一个数组赋值给另外一个数组会重置原来数组的指针 的问题

来源:互联网 发布:数据库sum函数怎么用 编辑:程序博客网 时间:2024/05/22 03:08

比较好用的数组遍历方法有两种:1.foreach(; ; ;)。 2.list( )搭配each( )。但在each( )函数在运用的时候需要注意一个问题。今天写了个程序,结果就陷入死循环了。

代码如下:

<?php$fruit = array('a'=>'apple','b'=>'banana');while( list($k,$v) = each($fruit) ){  echo "$k => $v ";  $tmp=$fruit;}?>

为什么程序会陷入死循环了,在php手册上有这样一个解释:因为将一个数组赋值给另一个数组时会重置原来的数组指针,因此在上边的例子中如果我们在循环内部将 $fruit 赋给了另一个变量的话将会导致无限循环。

那么验证了一下,指针改变的过程:

<?php$fruit = array('a'=>'apple','b'=>'banana');$tmp=$fruit;echo current($tmp);//结果为appleecho current($fruit);//结果为applevar_dump($tmp);//赋值成功,array('a'=>'apple','b'=>'banana')echo "<br />";each($fruit);//会使指针下移一位$tmp=$fruit;echo current($tmp);//结果为bananaecho current($fruit);//结果为bananavar_dump($tmp);//赋值成功,array('a'=>'apple','b'=>'banana')echo "<br />";each($fruit);//指针指向空了$tmp=$fruit;//将指针重置var_dump(current($fruit));//bool(false),不出所料没有值echo current($tmp);//结果为apple,果真将指针重置了var_dump($tmp);//赋值成功,array('a'=>'apple','b'=>'banana')?> 

虽然知道了函数的基本用法,但对它的实现过程却不了解,所以老是出现一些自己也想不到的问题,以后用函数的时候,还得好好看看手册。


1 0
原创粉丝点击