You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PHP array_merge合并数组并保留双方值的问题求助

问题分析

你遇到的问题是array_merge()的特性导致的:对于字符串键名的元素,后面数组的元素会直接覆盖前面数组的同名键元素,不管值是否为空。

看你的例子,$array[1]里的apples是空值,但它依然会覆盖$array[0]里apples的1,这就是为什么最终结果里apples变成空的,不符合你的预期。

你想要的是:合并两个关联数组,保留所有键,对于相同键的元素,优先保留第一个数组的非空值,没有的话用第二个数组的非空值填充,最后把合并后的数组放到外层数组的[0]位置。

解决方案

这里给你两种可行的实现方式:

方式一:遍历所有键手动合并(兼容性好,适合所有PHP版本)

// 你的原始数组
$array = [
    ['apples' => 1, 'pears' => '', 'oranges' => '', 'grapes' => '', 'melons' => 1],
    ['apples' => '', 'pears' => 1, 'oranges' => 1, 'grapes' => '', 'melons' => '', 'pineapples' => '', 'bananas' => '', 'lemons' => '']
];

$combined = [];
// 获取两个数组的所有键的并集,确保不遗漏任何键
$allKeys = array_unique(array_merge(array_keys($array[0]), array_keys($array[1])));

foreach ($allKeys as $key) {
    // 优先取第一个数组的非空值,若为空则取第二个数组的值
    if (isset($array[0][$key]) && !empty($array[0][$key])) {
        $combined[$key] = $array[0][$key];
    } elseif (isset($array[1][$key])) {
        $combined[$key] = $array[1][$key];
    }
}

// 将合并后的数组放到外层数组的[0]位置,得到你想要的结果
$result = [$combined];

// 输出结果
print_r($result);

方式二:用array_reduce简化代码(PHP 7.4+)

如果你的PHP版本在7.4及以上,可以用箭头函数结合array_reduce来简化代码:

$array = [
    ['apples' => 1, 'pears' => '', 'oranges' => '', 'grapes' => '', 'melons' => 1],
    ['apples' => '', 'pears' => 1, 'oranges' => 1, 'grapes' => '', 'melons' => '', 'pineapples' => '', 'bananas' => '', 'lemons' => '']
];

$combined = array_reduce(
    array_keys(array_merge($array[0], $array[1])),
    fn($carry, $key) => $carry + [$key => (!empty($array[0][$key]) ? $array[0][$key] : $array[1][$key])],
    []
);

$result = [$combined];
print_r($result);

结果验证

两种方式都会输出你预期的结果:

Array
(
    [0] => Array
        (
            [apples] => 1
            [pears] => 1
            [oranges] => 1
            [grapes] => 
            [melons] => 1
            [pineapples] => 
            [bananas] => 
            [lemons] => 
        )

)

内容的提问来源于stack exchange,提问作者Fazberry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:12:47