in_array vs isset - 表现

时间:2013-01-23 02:54:05

标签: php arrays

请考虑以下代码段:

示例#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快。

我确信我们都处于两种情况,但我的问题是:

  • 我应该总是选择#2吗?
  • 我什么时候应该选择#1?当$array * $array_test的大小<1时10? &小于100? &LT; 1000
  • 如何确定哪种方法在特定情况下更好?
  • 也许除了使用临时表$array_index之外还有其他一些技巧。我不记得其他编程语言中的类似情况,一切都准备就绪

请关注关联键。

有人问过非常相似的问题:

2 个答案:

答案 0 :(得分:2)

在第二个示例中,您必须构建$array的“翻转”值才能使用isset()。顺便说一句,您也可以使用array_flip()

如果您可以立即使用数组密钥(不进行转换),请使用isset(),因为它显然比in_array()快得多,因为方式键被查找,因为它是一个语言结构。

如果您无法在不进行转换的情况下使用密钥,则可以考虑将in_array()用于小型数组。对于更大的阵列,运行基准测试以确定阵列转换步骤是否仍然值得它是值得的。

最后,并且在很大程度上取决于具体情况,您也可以使用array_intersect_函数之一,主要是为了避免在PHP代码中循环。

答案 1 :(得分:1)

isset总是比in_array快,因为键是唯一的而值不是。键是唯一的事实为优化提供了值无法实现的可能性。