5

可能重复:
PHP 在 foreach 中通过引用传递

为什么数组中两个项目的值都会发生变化?我只是想更改等于 $testitem 的键的值。

以下代码的所需结果: 项目:5 数量:12 项目:6 数量:2

以下代码的当前结果是: item:5 Quantity:12 item:6 Quantity: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/>';
            }
?>
4

3 回答 3

8

当您尝试将$value变量作为参考传递时,问题就出现了。foreach通过将循环修改为如下所示,您将能够达到您想要的结果-

foreach($items as $key => $value){   
  if ($key == $testitem){
    $items[$key] = $value + $testvalue;   
  }
}

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

于 2012-07-22T23:09:51.273 回答
0

因为 $value 的引用和最后一个数组元素即使在 foreach 循环之后仍然存在。

在您的第一次 foreach 之后使用unset($value), 您的代码将正常工作。

于 2012-07-22T23:15:42.493 回答
-2

你为什么不直接使用这段代码而不是循环:

$items[$testitem] += $testvalue;

这适用于您的示例。

在 php 中,您可以使用变量引用数组元素。所以它正是你想要的。

于 2012-07-22T23:09:52.920 回答