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

如何检查两个多维数组的键与对应值是否一致?

解决多维数组键值一致性检查的问题

针对多维数组的键值匹配检查,array_intersect()确实没法直接生效——它只支持一维数组的交集计算,对嵌套的多维数组无能为力。这里给你两种实用的解决方案:

一、自定义递归对比函数(推荐)

这个方法会递归遍历两个数组的每一层键值对,精准对比对应路径下的键和值是否完全一致,还能灵活调整逻辑适配不同需求(比如检查子集匹配)。

函数实现

function checkMultiArrayMatch($array1, $array2) {
    // 先校验类型是否一致
    if (gettype($array1) !== gettype($array2)) {
        return false;
    }

    // 非数组类型直接对比值
    if (!is_array($array1)) {
        return $array1 === $array2;
    }

    // 键的数量不一致直接返回不匹配
    if (count($array1) !== count($array2)) {
        return false;
    }

    // 遍历每个键,递归对比对应的值
    foreach ($array1 as $key => $value) {
        // 检查目标数组是否存在当前键
        if (!array_key_exists($key, $array2)) {
            return false;
        }
        // 递归深入嵌套数组继续对比
        if (!checkMultiArrayMatch($value, $array2[$key])) {
            return false;
        }
    }

    return true;
}

使用示例

结合你给出的数组示例测试:

// 你的示例数组
$array1 = array( '5' => array( 'survey' => array('survey_list', 'add') ) );
$array2 = array( '5' => array( 'survey' => array('survey_list') ) );

// 执行检查
if (checkMultiArrayMatch($array1, $array2)) {
    echo "两个数组的键值完全一致";
} else {
    echo "两个数组存在差异";
}

运行后会输出两个数组存在差异,因为$array1中survey节点下有两个值,而$array2只有一个,完全匹配的条件不满足。

如果你的需求是检查$array2是否包含$array1的所有键值(即$array1是$array2的子集),可以修改函数逻辑,跳过$array2中多余的键值即可。

二、序列化后对比(简易版)

如果不需要定位具体差异位置,且数组结构规整(比如关联数组为主,索引数组元素顺序固定),可以把两个数组序列化后直接对比字符串:

if (serialize($array1) === serialize($array2)) {
    echo "键值完全一致";
} else {
    echo "存在差异";
}

注意:这个方法有局限性——如果是索引数组,元素顺序不同会被判定为差异;另外序列化格式可能受PHP版本影响,稳定性不如递归函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:32:36