问题可以简要的概括为:
$arr = array(1,2,3,4,5);
foreach($arr as $key => &$row) {}
foreach($arr as $key => $row) {}
var_dump($arr);
array (size=5)
  0 => int 1
  1 => int 2
  2 => int 3
  3 => int 4
  4 => &int 4
foreach 指针问题,指针大神,求现身!

解决方案 »

  1.   

    $arr = array(1,2,3,4,5);
    foreach($arr as $key => &$row) {}
    unset($row); //这个不能少,为了切断数组的引用
    foreach($arr as $key => $row) {}
    var_dump($arr);array(5) {
      [0]=>  int(1)
      [1]=>  int(2)
      [2]=>  int(3)
      [3]=>  int(4)
      [4]=>  int(5)
    }
      

  2.   

    unset($row); 这个不是么?请斑竹大人明示。
      

  3.   

    $arr = array(1,2,3,4,5);
    foreach($arr as $key => &$row) {}//这个执行完毕后,$arr[4]是个引用,值为5
    foreach($arr as $key => $row) {}//这个执行过程的意思是:每次将当前值赋值给$arr[4],在在第四次循环完毕时$arr[4]的值为4,第五次就是自己赋值自己,所以为4。
    $arr = array(1,2,3,4,5);
    foreach($arr as $key => &$row) {}
    var_dump($arr);
    echo $arr[4].'<br/>';
    foreach($arr as $key => $row) {
    echo $arr[4].'_';
    }
    var_dump($arr);
      

  4.   

    版主说得很对,否则下面的$row一直和$arr的最后一个元素的值绑定。第二次遍历的时候也是。
    加上6楼同学的解答,就更加豁然开朗了!$arr = array(1,2,3,4,5);
    foreach($arr as $key => &$row) {}
    var_dump($arr);
    foreach($arr as $key => $row) {
        var_dump($arr);
    }
    array (size=5)
      0 => int 1
      1 => int 2
      2 => int 3
      3 => int 4
      4 => &int 5
    int 5
    array (size=5)
      0 => int 1
      1 => int 2
      2 => int 3
      3 => int 4
      4 => &int 1
    array (size=5)
      0 => int 1
      1 => int 2
      2 => int 3
      3 => int 4
      4 => &int 2
    array (size=5)
      0 => int 1
      1 => int 2
      2 => int 3
      3 => int 4
      4 => &int 3
    array (size=5)
      0 => int 1
      1 => int 2
      2 => int 3
      3 => int 4
      4 => &int 4
    array (size=5)
      0 => int 1
      1 => int 2
      2 => int 3
      3 => int 4
      4 => &int 4
    array (size=5)
      0 => int 1
      1 => int 2
      2 => int 3
      3 => int 4
      4 => &int 4
      

  5.   

    我又想了下,实际可以用for循环来解释就很容易明白了
    $arr = array(1,2,3,4,5);
    foreach($arr as $key => &$row) {}
    var_dump($arr);
    for ($i=0; $i < 5; $i++) {
        $row = $arr[$i];
    }
    var_dump($arr);
    同样结果