
本文介绍两种高效方法:使用 `in_array()` 遍历比对,或直接调用 `array_diff()` 获取差集,精准识别 array₂ 中不在 array₁ 中的元素(含重复项)。
在 PHP 开发中,常需判断一个数组(如 $Array_2)是否包含不属于另一数组(如 $Array_1)的值——尤其当需要保留重复项、定位非法数据或做权限校验时。此时,in_array() 和 array_diff() 是最直接、可靠的两个内置方案,二者适用场景略有不同,下面分别详解。
✅ 方法一:使用 in_array() 逐项检查(适合需即时处理/带逻辑分支的场景)
该方式灵活可控,可在发现不匹配值时立即执行日志记录、抛出异常或构建错误列表:
$Array_1 = [5836, 5837];
$Array_2 = [5837, 2836, 2836];
$invalidValues = [];
foreach ($Array_2 as $value) {
if (!in_array($value, $Array_1, true)) { // 强类型比较更安全
$invalidValues[] = $value;
echo "$value 不在 Array_1 中\n";
}
}
// 输出:
// 2836 不在 Array_1 中
// 2836 不在 Array_1 中⚠️ 注意:务必使用第三个参数 true 启用严格比较(===),避免因类型转换导致误判(例如 0 == '0' 为 true,但 0 === '0' 为 false)。
✅ 方法二:使用 array_diff() 一次性获取差集(推荐用于批量分析与去重控制)
array_diff($array1, $array2) 返回 $array1 中不存在于 $array2 中的所有值,并保留原始键名与重复项——这正是本例所需的核心行为:
$Array_1 = [5836, 5837]; $Array_2 = [5837, 2836, 2836]; $difference = array_diff($Array_2, $Array_1); print_r($difference); // 输出: // Array // ( // [1] => 2836 // [2] => 2836 // )
若只需判断“是否存在差异”,可进一步简化为布尔检查:
立即学习“PHP免费学习笔记(深入)”;
if (!empty(array_diff($Array_2, $Array_1))) {
echo "Array_2 包含 Array_1 中不存在的值。\n";
}? 对比与选型建议
| 方案 | 优势 | 适用场景 |
|---|---|---|
| in_array() | 可中断执行、支持自定义逻辑 | 需逐条处理、记录上下文或提前终止 |
| array_diff() | 性能更优(底层 C 实现)、语义清晰 | 批量提取差异、后续统一处理或统计分析 |
? 补充提示:若需去重后获取唯一差异值,可组合 array_values(array_unique(array_diff($Array_2, $Array_1)));若需忽略键名仅比对值,两者均默认满足;若涉及多维数组,则需改用 array_udiff() 配合自定义比较函数。
掌握这两种方法,即可稳健应对绝大多数“跨数组值存在性校验”需求,兼顾可读性、性能与工程扩展性。











