在我的项目中,我增加了firstArray的值+ 3.在我增加secondArray +7的值之后。
$firstArray = array(
'a' => 1,
'b' => 3,
'c' => 5,
);
foreach ($firstArray as &$item) {
$item += 3;
}
print_r($firstArray);
结果: Array ( [a] => 4 [b] => 6 [c] => 8)
$secondArray = array(
'a' => 11,
'b' => 13,
'c' => 17,
);
foreach ($secondArray as $key=>$item) {
$secondArray[$key] += 7;
}
print_r($secondArray);
结果: Array ( [a] => 18 [b] => 20 [c] => 24 )
但问题是我做print_r($firstArray) again;
时有这个结果:
数组([a] => 4 [b] => 6 [c] => 17)
为什么结果fisrt和thisrd有区别?
答案 0 :(得分:1)
问题是,您使用$ item 作为链接,并在一次循环之后再次使用它(我认为在重用$ item后重写了一些值)。在第一次循环后你需要取消设置($ item),甚至在使用它们之后也是未设置的链接。
$firstArray = array(
'a' => 1,
'b' => 3,
'c' => 5,
);
foreach ($firstArray as &$item) {
$item += 3;
}
print_r($firstArray);
unset($item);
现在结果很好
答案 1 :(得分:1)
您可以使用array_map
代替循环和传递引用。你可以避免这种变异。例如:
$add = function($x) {
return function($y) use($x) {
return $x + $y;
};
};
$firstArray = array_map($add(3), $firstArray);
$secondArray = array_map($add(7), $secondArray);