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

PHP:如何删除数组中的唯一值?

优雅高效删除数组中的唯一值方案

嘿,你选array_count_values的思路完全没问题,这是实现这个需求最高效的路子之一!我给你分享一个简洁又高效的实现方式,不用复杂遍历就能搞定:

核心思路

先用array_count_values统计数组里每个元素的出现次数,接着用array_filter过滤原数组,只保留那些出现次数大于1的元素就行。

代码实现

$array = [1,2,3,5,4,3,4,5,234];

// 统计每个元素的出现频次,这一步是O(n)的高效操作
$elementCounts = array_count_values($array);

// 过滤出出现次数>1的元素
$newarray = array_filter($array, function($value) use ($elementCounts) {
    return $elementCounts[$value] > 1;
});

// 可选:如果需要重置数组索引(去掉原数组的键名),加上这一行
$newarray = array_values($newarray);

print_r($newarray);
// 输出结果:Array ( [0] => 3 [1] => 5 [2] => 4 [3] => 3 [4] => 4 [5] => 5 )

更简洁的写法(PHP7.4+)

如果你的PHP版本是7.4及以上,可以用箭头函数让代码更紧凑:

$array = [1,2,3,5,4,3,4,5,234];
$elementCounts = array_count_values($array);
$newarray = array_values(array_filter($array, fn($v) => $elementCounts[$v] > 1));

为什么这个方案高效?

  • array_count_values是PHP底层实现的函数,比自己手动循环统计快得多,时间复杂度是O(n)
  • array_filter同样是内置高效函数,只需要遍历一次原数组做判断,整体复杂度还是O(n)
  • 对比那种每次检查元素在数组中出现次数的方法(比如嵌套循环判断),避免了O(n²)的低效操作

内容的提问来源于stack exchange,提问作者redsunset

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 08:52:44