PHP對數組兩次foreach的使用陷阱

1. 兩次循環如果不實用引用打印結果沒有任何問題

$array = ['a','b','c'];
foreach ($array as $value){}
foreach ($array as $value){}
var_dump("<pre>", $array);

//執行結果
array(3) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
}

2. 當第一次循環使用引用後會出現如下bug

代碼如下:

$array = ['a','b','c'];
foreach ($array as &$value){}
foreach ($array as $value){}
var_dump("<pre>", $array);

執行結果:

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

分析原因:

從官網的信息來看,foreach循環時,是通過移動數組內部指針來實現的。

大家可以通過在第二個數組中打印array來觀察數組數據的變化,

通過下圖可以跟直觀的看到循環流程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章