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)