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

如何在PHP中找出不同大小和层级的多维数组差异

PHP 多维数组求差:找出数组B中不存在于数组A的元素

我有两个层级、大小不同的PHP多维数组,需要提取出第二个数组(数组B)中所有不存在于第一个数组(数组A)的元素,包括深层嵌套的子元素。尝试过array_diff和array_diff_assoc但都无法处理多维结构,达不到预期效果。

示例数组

数组A:

$bmw_a = array(
    "3 series" => array(),
    "5 series" => array(
        "520D" => array(
            "N47_163" => array(),
        ),
        "530i" => array(),
    ),
    "7 series" => array(),
);

数组B:

$bmw_b = array(
    "1 series" => array(),
    "3 series" => array(),
    "5 series" => array(
        "520D" => array(
            "N47_163" => array(),
            "M47_177" => array()
        ),
        "530i" => array(
            "M54_228" => array(),
            "N52_255" => array()
        ),
    ),
    "7 series" => array(),
);

期望输出

$output = array(
    "1 series" => array(),
    "5 series" => array(
        "520D" => array(
            "M47_177" => array()
        ),
        "530i" => array(
            "M54_228" => array(),
            "N52_255" => array()
        )
    )
);

解决方案:递归实现多维数组求差

PHP内置的数组差集函数只支持一维或浅层次对比,要处理多维数组需要自己写递归函数,遍历每一层的键值对进行比较:

function array_diff_recursive($array_b, $array_a) {
    $result = array();
    
    foreach ($array_b as $key => $value) {
        // 如果数组A中没有这个键,直接保留
        if (!array_key_exists($key, $array_a)) {
            $result[$key] = $value;
            continue;
        }
        
        // 如果都是数组,递归比较子数组
        if (is_array($value) && is_array($array_a[$key])) {
            $diff = array_diff_recursive($value, $array_a[$key]);
            // 子数组有差异才保留
            if (!empty($diff)) {
                $result[$key] = $diff;
            }
        }
        // 如果值不是数组且存在于A中,直接忽略(因为我们要找B独有的)
    }
    
    return $result;
}

// 调用函数
$output = array_diff_recursive($bmw_b, $bmw_a);

// 打印结果(可选)
print_r($output);

函数逻辑说明

  1. 遍历数组B的每个键值对,逐个和数组A对比
  2. 若数组A中不存在当前键,直接将该键值对加入结果数组
  3. 若键存在且两者都是数组,递归调用函数对比子数组
  4. 递归返回的子数组差异不为空时,才将该键和子差异加入结果
  5. 最终返回的就是数组B独有的所有元素,保留原嵌套结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:30:45