PHP实现:合并两个同键名数组并更新对应键值
嘿,这个需求在PHP开发里挺常见的,有两种简单直接的方式能帮你实现——用$temp的键值覆盖$months对应项,同时保留$months里所有原有的月份键:
解决方案:合并数组并覆盖对应键值
方法一:使用array_merge()函数
array_merge()对关联数组的处理逻辑刚好匹配你的需求:后面数组的相同键会覆盖前面数组的对应值,而且会完整保留前面数组中未被覆盖的所有键值对。
代码示例:
$months = array( 'January' => 0.00, 'February' => 0.00, 'March' => 0.00, 'April' => 0.00, 'May' => 0.00, 'June' => 0.00, 'July' => 0.00, 'August' => 0.00, 'September' => 0.00, 'October' => 0.00, 'November' => 0.00, 'December' => 0.00, ); $temp = array( 'February' => 200.00, 'May' => 17.50, ); // 合并数组,$temp的键值会覆盖$months的对应项 $months = array_merge($months, $temp);
执行后$months就会完全符合你的预期:February的值变为200.00,May变为17.50,其余月份保持原有的0.00。
方法二:遍历$temp手动赋值
如果你想更灵活地控制覆盖过程(比如赋值前做合法性校验),可以直接循环遍历$temp的键值对,手动赋值给$months:
foreach ($temp as $month => $value) { $months[$month] = $value; }
这种写法更直观,适合需要额外逻辑处理的场景,单纯覆盖的话和array_merge()效果一致。
⚠️ 注意:别用$months += $temp的写法,因为+运算符的逻辑是保留左侧数组的键值,右侧重复键会被直接忽略,和你需要的覆盖效果完全相反。
内容的提问来源于stack exchange,提问作者sleeper
相关产品推荐
相关产品推荐

