5

重複の可能性:
foreachでの参照によるPHPパス

配列内の両方のアイテムの値が変わるのはなぜですか?$testitemと等しいキーの値を変更しようとしています。

次のコードの望ましい結果: item:5数量:12item:6数量:2

次のコードの現在の結果は次のとおりです 。item:5数量:12item: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/>';
            }
?>
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ループの後も残ります。

unset($value)最初のforeachの後にを使用すると、コードは正常に機能します。

于 2012-07-22T23:15:42.493 に答える
-2

ループの代わりにこのコードを使用してみませんか。

$ items [$ testitem] + = $ testvalue;

これはあなたの例で機能します。

PHPでは、変数を使用して配列要素を参照できます。だからそれはあなたが望むことを正確に行います。

于 2012-07-22T23:09:52.920 に答える