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