可使用五种方法找出第一个数组中存在但第二个数组中不存在的元素:一、array_diff()仅比较值;二、array_diff_assoc()同时比较键和值;三、foreach遍历加in_array判断;四、array_filter配合匿名函数;五、array_keys结合array_diff_key模拟键差集。

如果您需要找出两个数组中存在于第一个数组但不存在于第二个数组的元素,则可以使用 PHP 提供的内置函数或手动遍历实现。以下是几种可行的方法:
array_diff() 是 PHP 原生函数,用于比较一个或多个数组的键值,并返回第一个数组中其他数组不包含的值。该函数仅比较值,不比较键名,且保留原始键名。
1、定义两个数组,例如 $arr1 = [1, 2, 3, 4]; $arr2 = [3, 4, 5, 6];
2、调用 $result = array_diff($arr1, $arr2);
立即学习“PHP免费学习笔记(深入)”;
3、输出结果:print_r($result); 将显示 Array ( [0] => 1 [1] => 2 )
array_diff_assoc() 在比较值的同时也对比键名,适用于需同时考虑键与值一致性的场景。当两个数组存在相同值但键名不同时,该键值对仍被保留在差集中。
1、定义 $arr1 = ['a' => 1, 'b' => 2, 'c' => 3]; $arr2 = ['x' => 1, 'b' => 2, 'y' => 4];
2、执行 $result = array_diff_assoc($arr1, $arr2);
3、结果中 'a' => 1 和 'c' => 3 会被保留,因为它们的键名未在 $arr2 中以相同键值对形式出现。
通过手动遍历第一个数组,逐个检查其元素是否存在于第二个数组中,可完全控制比较逻辑,支持自定义类型判断(如忽略大小写、浮点精度处理等)。
1、初始化空数组 $diff = [];
2、使用 foreach 遍历 $arr1,对每个值 $val 执行 if (!in_array($val, $arr2, true)) { $diff[] = $val; }
3、注意第三个参数 true 启用严格比较,避免 0 == '0' 或 0 == false 类型转换误判。
借助 array_filter 可以更函数式地表达“筛选出不在 $arr2 中的 $arr1 元素”,代码简洁且易于嵌套扩展。
1、设定 $arr1 和 $arr2;
2、执行 $diff = array_filter($arr1, function($v) use ($arr2) { return !in_array($v, $arr2, true); });
3、若需重置键名,可追加 $diff = array_values($diff); 此时结果为 [1, 2] 形式索引数组。
当目标是获取两个数组键名的差集(即只存在于 $arr1 键中而不在 $arr2 键中的键),可先提取键名再计算差集。
1、获取键数组:$keys1 = array_keys($arr1); $keys2 = array_keys($arr2);
2、计算键差:$key_diff = array_diff($keys1, $keys2);
3、用 array_intersect_key 提取对应值:$diff = array_intersect_key($arr1, array_flip($key_diff));
以上就是php怎么判断两个数组的差集_php数组差集array_diff计算与遍历法【技巧】的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号