请考虑以下代码段:
示例#1
$array = Array(1,2,3,4,5,6,7);
$array_test = Array(3,5,4,7,3,6,7,8,8,9,3);
foreach($array_test as $value) {
if(in_array($value, $array)) {
// do some magic here
}
}
示例#2
$array = Array(1,2,3,4,5,6,7);
$array_test = Array(3,5,4,7,3,6,7,8,8,9,3);
$array_index = Array();
foreach($array as $value) {
$array_index[ $value ] = true;
}
foreach($array_test as $value) {
if(isset($array_index[ $value ])) {
// do some magic here
}
}
显然两个片段都做同样的工作。在一些数组样本中,示例#1比示例#2快。
我确信我们都处于两种情况,但我的问题是:
$array * $array_test
的大小<1时10? &小于100? &LT; 1000 $array_index
之外还有其他一些技巧。我不记得其他编程语言中的类似情况,一切都准备就绪请关注关联键。
有人问过非常相似的问题:
答案 0 :(得分:2)
在第二个示例中,您必须构建$array
的“翻转”值才能使用isset()
。顺便说一句,您也可以使用array_flip()
。
如果您可以立即使用数组密钥(不进行转换),请使用isset()
,因为它显然比in_array()
快得多,因为方式键被查找和,因为它是一个语言结构。
如果您无法在不进行转换的情况下使用密钥,则可以考虑将in_array()
用于小型数组。对于更大的阵列,运行基准测试以确定阵列转换步骤是否仍然值得它是值得的。
最后,并且在很大程度上取决于具体情况,您也可以使用array_intersect_
函数之一,主要是为了避免在PHP代码中循环。
答案 1 :(得分:1)
isset总是比in_array快,因为键是唯一的而值不是。键是唯一的事实为优化提供了值无法实现的可能性。