如何在PHP数组中查找重复值?含示例场景技术求助
在PHP数组中查找重复值的解决方案
针对你提到的需求,这里有个简洁且通用的方法,不管数组大小如何都能适用,完全不需要预先指定要搜索的内容:
核心思路:统计值出现次数,过滤出重复项
我们可以利用PHP的array_count_values()函数先统计每个值的出现次数,再通过过滤提取出出现次数大于1的值,具体代码如下:
// 你的原始数组 $cars = array("Volvo", "BMW", "Toyota", "BMW", "Toyota"); // 统计每个值的出现次数 $valueCounts = array_count_values($cars); // 过滤出出现次数 > 1 的值,提取它们的键(也就是原数组的重复值) $duplicates = array_keys(array_filter($valueCounts, function($count) { return $count > 1; })); // 输出结果 print_r($duplicates);
运行这段代码后,你会得到输出:
Array ( [0] => BMW [1] => Toyota )
分步解释
array_count_values($cars):遍历原数组,返回一个关联数组,键是原数组的元素值,值是该元素出现的次数。这里得到的结果是:["Volvo" => 1, "BMW" => 2, "Toyota" => 2]。array_filter(...):传入刚才的统计数组,用匿名函数过滤掉出现次数≤1的元素,只保留次数>1的项,此时得到:["BMW" => 2, "Toyota" => 2]。array_keys(...):提取过滤后数组的键,也就是我们要找的重复元素本身,最终得到包含所有重复值的数组。
备选方案(手动循环实现)
如果你想手动实现逻辑而不依赖太多内置函数,也可以用循环结合数组记录出现过的值:
$cars = array("Volvo", "BMW", "Toyota", "BMW", "Toyota"); $seen = []; $duplicates = []; foreach ($cars as $car) { // 如果已经见过这个值,且还没加入重复数组 if (isset($seen[$car]) && !in_array($car, $duplicates)) { $duplicates[] = $car; } // 标记这个值已经出现过 $seen[$car] = true; } print_r($duplicates);
这个方法的逻辑是遍历数组时记录已经出现过的值,当遇到重复值且还没加入结果数组时,就把它加入进去,最终也能得到同样的结果。
内容的提问来源于stack exchange,提问作者Zohaib
相关产品推荐
相关产品推荐

