簡體   English   中英

in_array vs isset - 性能

[英]in_array vs isset - performance

考慮以下代碼片段:

示例#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大小小於 10 時? <100? <1000?
  • 如何在特定情況下確定哪種方法更好?
  • 也許除了使用臨時表$array_index之外還有其他一些技巧。 我不記得其他編程語言中的類似情況,一切都准備好了

請注意關聯鍵。

有人已經問過非常相似的問題:

在您的第二個示例中,您必須先構造$array的“翻轉”值,然后才能使用isset() 順便說一句,您也可以為此使用array_flip()

如果您可以立即使用數組鍵(無需轉換),請使用isset()因為它顯然比in_array()快得多因為鍵的查找方式以及它是一種語言結構。

如果不轉換就不能使用鍵,可以考慮對小數組使用in_array() 對於更大的數組,可能值得運行一個基准測試來確定數組轉換步驟是否仍然值得。

最后,在很大程度上取決於具體情況,您也可以使用array_intersect_函數之一,主要是為了避免在 PHP 代碼中循環。

isset 總是比 in_array 快,因為鍵是唯一的而值不是。 鍵是唯一的這一事實提供了值不可能實現的優化可能性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM