一个蛋疼的foreach引用问题,搞的我很郁闷。
简直浪费时间,演示代码。
public function test()
{
$teams = [
1 => 'a',
2 => 'b',
3 => 'c',
4 => 'd',
];
foreach ($teams as $key => &$team) {
//some code 1
}
foreach ($teams as $key => $team) {
// some code 2
}
echo json_encode($teams);
}
输出:
{"1":"a","2":"b","3":"c","4":"c"}
结论,倒数第一个的值会修改为倒数第二个的值一样。
修改1:在第一个foreach
结束后unset($team);
;
foreach ($teams as $key => &$team) {
//some code 1
}
unset($team);
foreach ($teams as $key => $team) {
//some code 2
}
修改2:两个foreach
都使用引用&$team
;
foreach ($teams as $key => &$team) {
//some code 1
}
foreach ($teams as $key => &$team) {
//some code 2
}
修改3:两个foreach
使用不同的变量$team
和$team2
;
foreach ($teams as $key => &$team) {
//some code 1
}
foreach ($teams as $key => $team2) {
//some code 2
}
修改1、修改2、修改3都可以得到符合预期的输出:
{"1":"a","2":"b","3":"c","4":"d"}
推荐文章: