可能重复:
PHP在foreach 中通过引用传递
为什么数组中的两个项的值都发生变化?我只是想更改等于$testitem的键的值。
以下代码的期望结果:项目:5数量:12项目:6数量:2
以下代码的当前结果为:项目:5数量:12项目:6数量:12
<?php
$items = array(
'5' => '4',
'6' => '2',
);
$testitem = '5';
$testvalue = '8';
foreach($items as $key => &$value)
{
if ($key == $testitem)
{
$value = $value + $testvalue;
}
}
foreach($items as $key => $value)
{
print 'item:'.$key.' Quantity:'.$value.'<br/>';
}
?>
当您试图将$value
变量作为引用传递时,就会出现问题。你将能够通过修改你的foreach
循环来达到你想要的结果,看起来像这样-
foreach($items as $key => $value){
if ($key == $testitem){
$items[$key] = $value + $testvalue;
}
}
只需使用当前的$key
或$testitem
的值,作为对$items
数组的引用,然后像这样修改内容。
即使在foreach循环之后,$值和最后一个数组元素的Behouse引用仍然保留。
在第一次foreach之后使用unset($value)
,您的代码将正常工作。
为什么不使用以下代码而不是循环:
$items[$testitem]+=$testvalue;
这适用于您的示例。
在php中,您可以使用变量引用数组元素。所以它正是你想要的。