【问题标题】:PHP - Why does the value change for both items in array? [duplicate]PHP - 为什么数组中两个项目的值都会改变? [复制]
【发布时间】:2012-07-22 23:05:39
【问题描述】:

可能重复:
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/>';
            }
?>

【问题讨论】:

    标签: php arrays


    【解决方案1】:

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

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

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

    【讨论】:

    • @ajo - 没问题!快乐编码!感谢选民 - 如果没有,不可能达到 8K!
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      $items[$testitem] += $testvalue;

      这适用于您的示例。

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

      【讨论】:

      • -1 对于一个糟糕的答案,说实话,我什至没有阅读代码来查看它是否正确,但如果你希望有人真正注意到你应该解释你的答案。跨度>
      • 这是一个显而易见的答案,我不知道他们为什么要努力做到这一点!而且我不在乎你的 -1
      • 只有懂的人才能明白。对于那些提出这个问题的人来说,这可能并不那么明显。如果您希望其他人真正认真对待您的回答,至少要解释一下为什么要这样做。
      • 阿里,没有人说它是,但解释不会花费你超过 30 秒的时间来写,尤其是当你理解它的时候。如果你对别人的态度是“我不解释,因为你应该已经明白了”,你到底指望别人如何学习,请告诉我你不是老师?
      • 好吧好吧,我加个解释!不是现在,也许有一天!
      猜你喜欢
      • 1970-01-01
      • 2014-03-25
      • 2021-02-04
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 2018-07-28
      • 2020-01-11
      • 2015-06-06
      相关资源
      最近更新 更多