PHP 如果键相同,则通过保留更高的值来合并两个数组

问题描述 投票:0回答:1

如果 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',
    ],
]
php callback array-replace
1个回答
0
投票

让我们合并两个数组: 首先,合并两个数组=>如果它们具有相同的键,

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);

希望这能解决。

© www.soinside.com 2019 - 2024. All rights reserved.