php:检查数组是否有重复项

2022-08-30 08:10:43

我确信这是一个非常明显的问题,并且有一个函数可以做到这一点,但我似乎找不到它。在PHP中,我想知道我的数组中是否有重复项,尽可能高效。我不想像删除它们那样删除它们,我也不是特别想运行并将其与原始数组进行比较以查看它们是否相同,因为这似乎非常低效。就性能而言,“预期条件”是阵列没有重复项。array_uniquearray_unique

我只是希望能够做这样的事情

if (no_dupes($array))
    // this deals with arrays without duplicates
else
    // this deals with arrays with duplicates

有什么明显的功能我没有想到吗?
如何检测PHP数组中的重复值?
有正确的标题,这是一个非常相似的问题,但是如果你真的读了这个问题,他正在寻找array_count_values。


答案 1

我知道你不追求.但是,您不会找到一个神奇的明显函数,也不会比使用本机函数更快地编写一个函数。array_unique()

我提议:

function array_has_dupes($array) {
   // streamline per @Felix
   return count($array) !== count(array_unique($array));
}

调整array_unique() 的第二个参数以满足您的比较需求。


答案 2

性能优化解决方案

如果您关心性能和微优化,请查看以下单行代码:

function no_dupes(array $input_array) {
    return count($input_array) === count(array_flip($input_array));
}

描述:
函数将 中的数组元素数与 array_flip的元素进行比较。值成为键并猜测什么 - 键在关联数组中必须是唯一的,因此不会丢失唯一值,并且最终元素数低于原始元素。$input_array

警告:
手册中所述,数组键只能是int字符串的类型,因此这是原始数组值中必须具有的内容才能进行比较,否则PHP将开始转换并产生意外结果。有关此边缘情况故障模式的示例,请参阅 https://3v4l.org/7bRXI

包含 1000 万条记录的数组的证明: