Php 为什么我';m无法在关联数组中添加新的键值对?

Php 为什么我';m无法在关联数组中添加新的键值对?,php,arrays,multidimensional-array,associative-array,key-value,Php,Arrays,Multidimensional Array,Associative Array,Key Value,我有一个名为$data的大型关联数组。为了你的理解,我在下面打印一个元素 Array ( [0] => Array ( [id] => 92 [zip_code] => 07080 [phone_no] => 7327630062 [amount] => [currency] => $ [p

我有一个名为
$data
的大型关联数组。为了你的理解,我在下面打印一个元素

Array
(
    [0] => Array
        (

            [id] => 92
            [zip_code] => 07080
            [phone_no] => 7327630062
            [amount] => 
            [currency] => $
            [product_details] => Array
                (
                )

        )
    [1] => Array
        (

            [id] => 93
            [zip_code] => 07081
            [phone_no] => 7327630063
            [amount] => 20
            [currency] => $
            [product_details] => Array
                (
                )

        )
)
现在,我想在上述名为
$data
的关联数组的每个元素中创建一个新的键值对。为此,我编写了以下逻辑,但它并没有创建新的键值对。有人能在这方面帮助我吗

foreach($data as $key => $value) {
        if(!empty($value['amount'])) { 
          $value['final_amount'] = $value['amount'] - 2;
        } else 
          $value['final_amount'] = '';        
      }

foreach
循环中,通过在变量名称前添加一个符号
&
,通过引用传递
$value

foreach($data as $key => &$value)
这将允许循环修改原始
$data
,而不是修改其副本。

来自:

以便能够直接修改循环中的数组元素 在$value前面加上&。在这种情况下,该值将由 参考资料


在执行foreach时,PHP会创建副本,因此执行
$value=something
实际上不会影响原始数组通过引用传递
$value
。此外,数组似乎是关联数组的索引数组。你可以为($i=0$i@Jonathon我同意你的第一个评论,但我不同意第二个。foreach循环works@Jonathon这将增加调用
count()的开销
函数用于循环的每次迭代。手册还包含此警告,这是一种良好的做法:
引用$value,即使在foreach循环之后,最后一个数组元素仍然保留。建议使用unset()销毁它。
在这种情况下,
unset($value);
语句应该添加到循环的正下方。@yitwail:我认为这是噪音。如果
$value
的范围乍一看不清楚,您可能应该进行一些重构。
foreach($data as $key => &$value)