PHP - 为什么数组中的两个项的值都会改变?

时间:2012-07-22 23:05:40

标签: php arrays

  

可能重复:
  PHP Pass by reference in 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/>';
            }
?>

3 个答案:

答案 0 :(得分:8)

当您尝试将$value变量作为参考传递时,问题就出现了。通过将foreach循环修改为这样 -

,您将能够获得所需的结果
foreach($items as $key => $value){   
  if ($key == $testitem){
    $items[$key] = $value + $testvalue;   
  }
}

只需使用当前$key$testitem的值作为对$items数组的引用 - 并修改此类内容。

答案 1 :(得分:0)

Becouse引用$ value,最后一个数组元素在foreach循环之后仍然存在。

使用unset($value),在您的第一次预告之后,您的代码将正常运行。

答案 2 :(得分:-2)

为什么不直接使用此代码而不是循环:

$ items [$ testitem] + = $ testvalue;

这适用于您的示例。

在php中,您可以使用变量引用数组元素。所以它完全符合你的要求。