PHP性能问题:在将被搜索的数组中保留重复项的速度更快,还是数组_唯一?

PHP性能问题:在将被搜索的数组中保留重复项的速度更快,还是数组_唯一?,php,arrays,performance,Php,Arrays,Performance,我有向数组添加值的代码。稍后将在代码的另一部分中搜索该数组。添加到数组中的值不一定是唯一的,因此有可能在被搜索的数组中出现重复值。从技术上讲,即使搜索的数组中存在重复项,我的代码也可以正常工作,并且我能够找到值。我只想知道这个值是否在被搜索的数组中,而不管它是在数组中搜索1次还是10000次 我的问题是(出于性能和/或风格方面的原因)在搜索之前,是否首选对正在搜索的数组执行array_unique() 例如,假设我想搜索这样的数组: $searchMe = Array("dog", "cat",

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

我的问题是(出于性能和/或风格方面的原因)在搜索之前,是否首选对正在搜索的数组执行array_unique()

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

$searchMe = Array("dog", "cat", "mouse", "dog", "dog", "dog");
请注意,“dog”出现4次。如果我想在该数组中搜索值“dog”,它将工作正常,并且我将能够判断它是否存在。如上所述,我不在乎它出现了多少次,我只想知道它是否真的存在

那么,我应该在搜索之前先执行此操作,然后再针对重复数据消除阵列进行搜索吗?

$searchMe_cleaned = array_unique($searchMe);
也就是说,这会比只搜索具有重复项的阵列更快吗

请记住,尽管在本例中搜索的数组只有几个元素,但实际搜索的数组可能有数百或数千个元素


谢谢

我认为
array\u unique
比\u array中的
慢,但是如果您想搜索数组不止一次,或者如果您想节省内存,这是有意义的


另一种选择是使用(这也会删除重复的键),然后使用
isset
array\u键存在
,因为它们比array中的
快得多,我个人会这样做。

array\u unique比array中的
sqrt(n)
慢几倍。但是,如果你优化数据并多次搜索,它可能是值得的

PS:注意

isset($arr[$key])

比_array中的
工作更快
提供相同的结果

值得提升为一个答案:


刚刚发现
array_键(array_flip($array))
array_unique()快得惊人。100元素阵列快80%,1000元素阵列快95%,10000+元素阵列快99%


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

好建议!我喜欢array_flip在本质上删除重复项的同时还允许您使用更快的isset()函数
array_unique()快得惊人。100元素阵列快80%,1000元素阵列快95%,10000+元素阵列快99%@Carlos我刚刚发现了同样的事情,所以我可以确认这项技术非常有效!还请注意,
array\u键(array\u flip($array))
仅适用于整数。请参阅和了解基准测试,我在其中又添加了一个,
array\u flip(array\u flip($array)),其性能为。有时一个更快,有时另一个更快——当然,两者都比其他选择更快。