PHP如何避免展开运算符覆盖原数组 仅新增另一数组的缺失条目
解决方案
你直接使用展开运算符赋值$data_one = [...$data_two];相当于将$data_one的内容整体替换为$data_two,自然会覆盖原有id对应条目的default属性值。要实现仅新增$data_two中不存在于$data_one的id条目、同时保留原有条目的值,可按以下代码实现:
// 先将$data_one转为以id为键的关联数组,用于快速判断id是否存在 $existingMap = array_column($data_one, null, 'id'); foreach ($data_two as $item) { // 仅当id未在$data_one中存在时,才将该条目追加到$data_one if (!isset($existingMap[$item['id']])) { $data_one[] = $item; } }
执行后$data_one的结构就和你期望的结果完全一致:原有491、492、493条目的default值保留,仅新增了id为494的条目。
如果需要保证数组始终按id升序排列,可在追加完成后增加排序逻辑:
usort($data_one, function($a, $b) { return $a['id'] - $b['id']; });
内容的提问来源于stack exchange,提问作者calin24
相关产品推荐
相关产品推荐

