PHP性能问题:更快地将重复项留在将被搜索的数组或执行array_unique?

Tra*_*ron 5 php arrays performance

我有代码,可以为数组添加值.稍后在我的代码的另一部分中搜索该数组.添加到数组的值不一定是唯一的,因此最终可能会在搜索的数组中出现重复值.从技术上讲,即使搜索到的数组中存在重复项,我的代码也能正常工作,我将能够找到该值.我只是想知道值是否在被搜索的数组中,并且不关心它是在数组中1次还是10,000次.

我的问题是,在我进行搜索之前,是否首选(出于性能和/或样式的原因)在我的数组上搜索array_unique().

例如,假设我想搜索这样的数组:

$searchMe = Array("dog", "cat", "mouse", "dog", "dog", "dog");
Run Code Online (Sandbox Code Playgroud)

请注意,"狗"出现4次.如果我想搜索值"dog",在该数组中,它将正常工作,我将能够告诉它存在.如上所述,我不在乎它存在多少次,我只是想知道它是否存在.

那么我应该先搜索然后搜索去掉的数组呢?

$searchMe_cleaned = array_unique($searchMe);
Run Code Online (Sandbox Code Playgroud)

也就是说,这比仅仅使用重复数据搜索数组更快?

请记住,虽然在这个例子中,被搜索的数组只有几个元素,但搜索的实数可能有数百或数千个元素.

谢谢!

Ali*_*xel 9

我认为array_unique比较慢in_array但是如果你想要多次搜索数组或者想要节省内存是有意义的.

另一种选择是使用array_flip(也将丢弃重复的密钥),然后使用issetarray_key_exists因为它们比in_array这更快,我个人会这样.

  • 刚刚发现`array_keys(array_flip($ array));`比`array_unique();`快得多.100个元素阵列的速度提高约80%,1000个元素阵列的速度提高95%,10000个元素阵列的速度提高99%. (9认同)

Mar*_*tin 8

此评论值得提升为一个答案:

刚发现它array_keys(array_flip($array));的速度快得惊人array_unique();。100个元素阵列的速度大约提高了80%,1000个元素阵列的速度提高了95%,10,000 +个元素阵列的速度提高了99%。

此处的测试表明,对于包含数组值重复的随机(整数)字符串,该array_keys(array_flip($array));方法比其他方法快几个数量级