如果 PHP 中的键相同,我想通过保持更高的值来合并两个数组。还想保留数组键。
我不是在寻找手动遍历数组和比较值的解决方案,我正在考虑与 array_replase 和回调调用(如果可能)的某种组合。
示例:
$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',
],
]
预期结果:
$result = [
4 => [
'name' => 'John',
'value' => '5',
],
5 => [
'name' => 'Peter',
'value' => '6',
],
6 => [
'name' => 'Steve',
'value' => '7',
],
]
让我们合并两个数组: 首先,合并两个数组=>如果它们具有相同的键,
array_replace
将使用第二个数组中的值。
应用回调函数:将
array_map
与自定义回调函数一起使用。该函数将比较两个数组中相同键的值,并保留值较高的那个。
$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'],
];
//组合数组
$combined = array_replace($array1, $array2);
//应用回调函数以保持更高的值
$result = array_map(function ($key) use ($array1, $array2) {
if (isset($array1[$key]) && isset($array2[$key])) {
return $array1[$key]['value'] >= $array2[$key]['value'] ? $array1[$key] : $array2[$key];
}
return isset($array1[$key]) ? $array1[$key] : $array2[$key];
}, array_keys($combined));
print_r($result);
希望这能解决。