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

PHP中如何判断一个数组的所有元素都包含在另一个数组中

问题排查与解决方案

1. 数组定义语法错误

你给出的示例数组中GHI没有添加单/双引号,PHP会将未定义的裸词默认识别为字符串,但会抛出Notice级别的报错,若生产环境关闭了Notice提示,可能出现常量值与预期字符串不匹配的情况,导致元素匹配失败,先修正数组定义:

// 修正后的数组定义
$items = ['ABC', 'DEF', 'GHI'];
$array1 = ['ABC', 'DEF', 'GHI'];
$array2 = ['DEF'];

2. 原有代码逻辑验证

你写的!array_diff($items, $array1)逻辑本身是符合要求的:array_diff($a, $b)会返回所有在$a中存在、但在$b中不存在的元素,若返回空数组则说明$a的所有元素都在$b中,空数组转布尔值为false,取反后得到true。你没有得到正确结果大概率是上述的数组语法错误,或者写反了array_diff的两个参数顺序。
另外你写的$result = array_intersect($items,$array1);属于冗余代码,后续你已经重新给$result赋值,不会影响最终结果,可以直接删除。

3. 优化实现方案

基础实现(小数组场景)

直接基于array_diff封装成可复用函数:

function checkAllElementsExist(array $items, array $target): bool
{
    return empty(array_diff($items, $target));
}

测试结果:

var_dump(checkAllElementsExist($items, $array1)); // bool(true)
var_dump(checkAllElementsExist($items, $array2)); // bool(false)

高性能实现(大数组场景)

当数组元素较多时,array_diff的时间复杂度较高,可通过哈希表映射实现O(n)级别的判断:

function checkAllElementsExist(array $items, array $target): bool
{
    // 将目标数组转换为 元素值=>索引 的哈希表
    $targetHash = array_flip($target);
    foreach ($items as $item) {
        // 只要有一个元素不存在就直接返回false
        if (!isset($targetHash[$item])) {
            return false;
        }
    }
    return true;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:15:04