[英]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 快。
我相信我們都處於這兩種情況,但是我的問題是:
$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.