本文介绍了奇怪的行为的foreach的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 < PHP
  $一个=阵列('一个','B','C','D');  的foreach($ A为&放大器; $ V){}
  的foreach($ A $为V){}  的print_r($ A);
?>

我认为这是一个正常的程序,但是这是我得到的输出:

 阵列

    [0] =>一个
    [1] => b
    [2] => C
    [3] => C

有人可以解释这样对我?


解决方案

这是证据充分的PHP行为
参见php.net的页面的foreach

$a = array('a', 'b', 'c', 'd');

foreach ($a as &$v) { }
unset($v);
foreach ($a as $v) { }

print_r($a);

EDIT

Attempt at a step-by-step guide to what is actually happening here

$a = array('a', 'b', 'c', 'd');
foreach ($a as &$v) { }   // 1st iteration $v is a reference to $a[0] ('a')
foreach ($a as &$v) { }   // 2nd iteration $v is a reference to $a[1] ('b')
foreach ($a as &$v) { }   // 3rd iteration $v is a reference to $a[2] ('c')
foreach ($a as &$v) { }   // 4th iteration $v is a reference to $a[3] ('d')

                          // At the end of the foreach loop,
                          //    $v is still a reference to $a[3] ('d')

foreach ($a as $v) { }    // 1st iteration $v (still a reference to $a[3])
                          //    is set to a value of $a[0] ('a').
                          //    Because it is a reference to $a[3],
                          //    it sets $a[3] to 'a'.
foreach ($a as $v) { }    // 2nd iteration $v (still a reference to $a[3])
                          //    is set to a value of $a[1] ('b').
                          //    Because it is a reference to $a[3],
                          //    it sets $a[3] to 'b'.
foreach ($a as $v) { }    // 3rd iteration $v (still a reference to $a[3])
                          //    is set to a value of $a[2] ('c').
                          //    Because it is a reference to $a[3],
                          //    it sets $a[3] to 'c'.
foreach ($a as $v) { }    // 4th iteration $v (still a reference to $a[3])
                          //    is set to a value of $a[3] ('c' since
                          //       the last iteration).
                          //    Because it is a reference to $a[3],
                          //    it sets $a[3] to 'c'.

这篇关于奇怪的行为的foreach的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-23 03:36
查看更多