PHP:如何将$newcosts值按索引替换$mainarray各子项的cost键
原代码出错原因
你写的代码有两个核心问题,才会导致替换结果不对:
- 选错了替换函数:
str_replace是全局字符串替换工具,只要内容匹配旧值就会被替换为第一个匹配的新值,完全没有按索引对应替换的逻辑 - 循环里动态拼旧值数组:每轮循环都把当前的
$value['cost']追加到$values里,到第二轮时$values已经是[60.00, 60.00],所有值为60的项都会被替换为第一个新值52.68,这就是你看到两个cost都是52.68的原因
正确实现方式
因为$newcosts和$mainarray是按索引一一对应的(第N个新成本替换第N个子数组的cost),直接用循环的$key做键值赋值就行,根本不需要用到字符串替换:
$new_array = []; foreach ($mainarray as $key => $value) { // 先拷贝原数组的其他字段,避免改动原数组 $new_array[$key] = $value; // 按索引对应替换cost值 $new_array[$key]['cost'] = $newcosts[$key]; }
如果担心两个数组长度不匹配、出现索引不存在的报错,可以加个简单的容错判断:
$new_array = []; foreach ($mainarray as $key => $value) { $new_array[$key] = $value; // 仅当对应索引的新成本存在时才替换 if (isset($newcosts[$key])) { $new_array[$key]['cost'] = $newcosts[$key]; } }
最终输出结果
执行后得到的$new_array完全符合预期:
Array ( [0] => Array ( [id] => 2 [date] => 15.12.2020 [cost] => 52.68 ) [1] => Array ( [id] => 1 [date] => 22.12.2020 [cost] => 7414.68 ) [2] => Array ( [id] => 3 [date] => 24.12.2020 [cost] => 2471.56 ) )
内容的提问来源于stack exchange,提问作者ntsu
相关产品推荐
相关产品推荐

