在开发过程中,我们经常会遇到需要比较两个或多个数组的情况,特别是找出某个数组中。PHP 提供了一个非常实用的内建函数 —— array_diff(),可以轻松完成这一任务。
array_diff() 是 PHP 中用于比较数组差异的函数。它会返回一个数组,该数组包含了只出现在第一个数组中的元素,而不会返回存在于后面数组中的任何值。
array array_diff(array $array1, array ...$arrays)
$array1 是你要比较的主数组。
$arrays 是你要和主数组进行比较的一个或多个数组。
假设我们记录了用户原有的兴趣,以及用户提交的新兴趣列表,想要知道哪些是新增的。
<?php
$originalInterests = ['音乐', '电影', '旅行'];
$newInterests = ['音乐', '电影', '旅行', '摄影', '阅读'];
$addedInterests = array_diff($newInterests, $originalInterests);
print_r($addedInterests);
?>
输出:
Array
(
[3] => 摄影
[4] => 阅读
)
可以看到,array_diff() 返回了只出现在 $newInterests 中的元素,也就是用户新增的兴趣。
假设你在处理一个用户提交的网站列表时,想要过滤掉用户已经提交过的网址,只留下新的。
<?php
$existingUrls = [
'https://m66.net/article/123',
'https://m66.net/blog/2024',
];
$submittedUrls = [
'https://m66.net/article/123',
'https://m66.net/tools/checker',
'https://m66.net/blog/2024',
'https://m66.net/contact',
];
$newUrls = array_diff($submittedUrls, $existingUrls);
print_r($newUrls);
?>
输出:
Array
(
[1] => https://m66.net/tools/checker
[3] => https://m66.net/contact
)
结果表明,用户提交的这两个网址是新的,没有在原始列表中出现过。
array_diff() 是通过值进行比较的,而且是使用非严格模式(不比较数据类型),比如 '1' 和 1 被认为是相同的。
如果需要使用严格比较(也就是连数据类型都要比较),可以使用 array_diff_assoc() 或 array_diff_key()。
返回结果保持了原数组中的键名,如果你不需要键名,可以用 array_values() 重新索引。
$cleanList = array_values(array_diff($newUrls, $existingUrls));
array_diff() 是一个非常强大的工具,适用于数据筛选、日志对比、用户行为分析等多种场景。只要理解了它的工作方式,很多数组处理的逻辑都能变得简单而高效。
希望这篇文章能帮助你更好地理解并使用 array_diff()!如果你在开发中遇到类似的问题,不妨试试这个函数,也许就能节省你大量的代码量。