php foreach循环引用的问题

使用代码 在嵌套使用循环的时候 要注意循环引用的问题

demo

$arr = [
            'a', 'b',
            'c', 'd',
        ];
        foreach ($arr as &$each){
            var_dump($arr);
        }
        foreach ($arr as $each){
            var_dump($arr);
        }

  

输出结果

array(4) {
  [
    0
  ]=>
  &string(1) "a"
  [
    1
  ]=>
  string(1) "b"
  [
    2
  ]=>
  string(1) "c"
  [
    3
  ]=>
  string(1) "d"
}
array(4) {
  [
    0
  ]=>
  string(1) "a"
  [
    1
  ]=>
  &string(1) "b"
  [
    2
  ]=>
  string(1) "c"
  [
    3
  ]=>
  string(1) "d"
}
array(4) {
  [
    0
  ]=>
  string(1) "a"
  [
    1
  ]=>
  string(1) "b"
  [
    2
  ]=>
  &string(1) "c"
  [
    3
  ]=>
  string(1) "d"
}
array(4) {
  [
    0
  ]=>
  string(1) "a"
  [
    1
  ]=>
  string(1) "b"
  [
    2
  ]=>
  string(1) "c"
  [
    3
  ]=>
  &string(1) "d"
}
array(4) {
  [
    0
  ]=>
  string(1) "a"
  [
    1
  ]=>
  string(1) "b"
  [
    2
  ]=>
  string(1) "c"
  [
    3
  ]=>
  &string(1) "a"
}
array(4) {
  [
    0
  ]=>
  string(1) "a"
  [
    1
  ]=>
  string(1) "b"
  [
    2
  ]=>
  string(1) "c"
  [
    3
  ]=>
  &string(1) "b"
}
array(4) {
  [
    0
  ]=>
  string(1) "a"
  [
    1
  ]=>
  string(1) "b"
  [
    2
  ]=>
  string(1) "c"
  [
    3
  ]=>
  &string(1) "c"
}
array(4) {
  [
    0
  ]=>
  string(1) "a"
  [
    1
  ]=>
  string(1) "b"
  [
    2
  ]=>
  string(1) "c"
  [
    3
  ]=>
  &string(1) "c"
}

原因 是

php的foreach会在每次循环时,讲当前元素赋值给each, 然后进入循环体

当foreach遍历完成后, each变量没有释放而是指向了arr数组中的最后一个元素, 所以在后面给each赋值时, 其实改变的时arr数组的最后一个元素 所以最后一个一直在引用赋值