在php的数组处理场景中,array_diff函数是对比多个数组差异的核心工具,它的核心逻辑是返回第一个数组中存在,而在后续所有数组中都不存在的元素,开发者可以借助这个特性快速去除数组中指定的元素。

array_diff函数基本语法
array_diff的函数定义如下,它接收至少一个数组作为参数,第一个参数是待处理的原始数组,后续参数是用来对比的数组:
<?php
/**
* 对比数组差异,返回第一个数组中存在而其他数组中不存在的元素
* @param array $array 待处理的原始数组
* @param array ...$arrays 用来对比的数组,可传入多个
* @return array 差异结果数组
*/
function array_diff(array $array, array ...$arrays): array
{
// 函数内部实现逻辑由php引擎提供
}
?>
基础使用:去除数组中的指定元素
如果需要从原始数组中去除几个固定的元素,只需要把原始数组作为第一个参数,把要去除的元素组成数组作为第二个参数即可:
<?php // 原始数组 $origin_arr = [1, 2, 3, 4, 5, 6]; // 要去除的元素组成的数组 $remove_arr = [2, 4, 6]; // 调用array_diff获取去除元素后的结果 $result_arr = array_diff($origin_arr, $remove_arr); // 输出结果,预期为[1,3,5] print_r($result_arr); ?>
上述代码的执行结果是Array ( [0] => 1 [2] => 3 [4] => 5 ),可以看到原始数组中的2、4、6已经被成功去除。
多数组对比的使用场景
array_diff支持传入多个对比数组,只要元素在任意一个对比数组中存在,就会被从结果中移除:
<?php $origin = ['a', 'b', 'c', 'd', 'e']; $remove1 = ['a', 'c']; $remove2 = ['d']; // 同时对比两个移除数组 $res = array_diff($origin, $remove1, $remove2); print_r($res); ?>
执行后输出Array ( [1] => b [4] => e ),元素a、c、d分别在两个移除数组中存在,因此都被去除了。
字符串数组的使用示例
array_diff同样适用于字符串类型的数组,对比时是按照字符串的值进行严格比较:
<?php $str_arr = ['apple', 'banana', 'orange', 'grape']; $remove_str = ['banana', 'grape']; $str_res = array_diff($str_arr, $remove_str); print_r($str_res); ?>
输出结果为Array ( [0] => apple [2] => orange ),符合预期。
使用注意事项
- array_diff进行的是松散比较,也就是
==级别的比较,如果原始数组中有整数1,对比数组中有字符串'1',那么整数1也会被去除。 - 函数返回的结果数组会保留原始数组的键名,不会重新索引,如果需要连续的索引,可以搭配
array_values函数使用。 - 如果传入的对比数组为空,那么会返回原始数组的所有元素,因为不存在需要对比移除的内容。
如果需要严格比较(类型和值都相等),可以使用array_diff_strict函数,它的用法和array_diff一致,但是对比时使用的是===严格相等判断。
搭配array_values重新索引
由于array_diff保留原键名,有时候需要连续的索引,可以参考下面的示例:
<?php $origin = [10, 20, 30, 40]; $remove = [20, 40]; $res = array_diff($origin, $remove); // 重新索引数组 $new_res = array_values($res); print_r($new_res); ?>
执行后输出Array ( [0] => 10 [1] => 30 ),索引从0开始连续排列。
phparray_diff数组操作元素去除修改时间:2026-07-06 01:09:24