You need to enable JavaScript to run this app. PHP:如何将$newcosts值按索引替换$mainarray各子项的cost键
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.12 03:36:03