PHP合并数组:键相同时保留值更大元素并保留原键
PHP合并数组:键名相同时保留value更大的元素(结合array_replace与回调实现)
解决方案代码
$array1 = [ 4 => [ 'name' => 'John', 'value' => '5', ], 5 => [ 'name' => 'Michael', 'value' => '4', ], 6 => [ 'name' => 'Steve', 'value' => '7', ], ]; $array2 = [ 5 => [ 'name' => 'Peter', 'value' => '6', ], 6 => [ 'name' => 'Glen', 'value' => '3', ], ]; // 过滤array2,仅保留value大于array1对应键的元素 $filteredArray2 = array_filter($array2, function($item, $key) use ($array1) { return isset($array1[$key]) ? (int)$item['value'] > (int)$array1[$key]['value'] : true; }, ARRAY_FILTER_USE_BOTH); // 合并数组,自动保留value更大的元素与原键名 $result = array_replace($array1, $filteredArray2); print_r($result);
逻辑说明
- 过滤数组2:使用
array_filter搭配回调函数,筛选出$array2中满足以下条件的元素:- 如果
$array1中存在相同键,仅保留value数值更大的元素(转成整数避免字符串比较误差); - 如果
$array1中无对应键,直接保留该元素(兼容两数组键不重叠的场景)。
- 如果
- 合并数组:通过
array_replace将过滤后的$array2与$array1合并,该函数会保留原数组键名,并用后续数组的元素替换前序数组中相同键的元素,最终得到键名相同时保留value更大元素的结果。
内容的提问来源于stack exchange,提问作者user3029120
相关产品推荐
相关产品推荐

