You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:29:59