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

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

代码如下:

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

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

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

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

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



你可能感兴趣的:(关于 将一个数组赋值给另外一个数组会重置原来数组的指针 的问题)