PHP-为什么数组中的两个项的值都会发生变化


PHP - Why does the value change for both items in array?

可能重复:
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中,您可以使用变量引用数组元素。所以它正是你想要的。