2010-12-23 26 views
23

我有一個大while循環功能,每次被加載的檢查與當前URL名時間。 所以我需要知道哪一個更好,在while循環內檢查URL大陣列, in_array()array_search()函數。這是最好的array_search或in_array?

回答

28

基礎的in_arrayarray_search的文件上,我認爲,這主要取決於你想要的信息做什麼:如果你需要的條目,使用array_search,如果你只是想檢查是否存在網址在陣列中,in_array應該足夠了。

+0

取決於時間,這是最好之間真正大的差異? – Thilak 2010-12-25 06:37:20

+0

經過長時間的參考,並取決於我的要求,我選擇了in_array函數。 – Thilak 2010-12-28 11:57:09

47

如果它是一個大陣在一個循環中,無論是「最好的」。而是在您的陣列上使用array_flip(),因此網址成爲關鍵字。並使用isset()檢查是否存在。

+0

謝謝馬里奧,這是另一種方法。但將該函數與in_array和array_search函數相比較,該函數是否會給出速度結果? – Thilak 2010-12-25 06:33:51

+1

PHP在檢查鍵的存在方面比檢查值快得多。如果您需要經常參考的大量唯一值,請始終將它們設置爲鍵。 – 2014-01-03 07:40:30

+5

爲此,原始值必須是整數或字符串。雖然它適用於OP的問題,但它不能用作一般解決方案。 – 2014-07-30 17:56:07

0

如果你唯一的目標就是要檢查是否有URL數組我會去in_array中存在。儘管最好的方法是設置鍵,所以你可以通過數組鍵來搜索。這樣你節省了很多循環。

$searchword = "test"; 
echo $array[$searchword]; 
4

它的不同功能 in_array - 返回true,如果發現價值 array_search - 回報的位置,如果發現價值

$a = array('a', 'b'); 
var_dump(in_array('a', $a)); // return true 
var_dump(array_search('a', $a)); // return 0 
if (array_search('a', $a)) - false 
48

這裏有沒有真正的答案。所以我嘗試了,我自己。

$haystack = array 
(
    'apple', 
    'banana', 
    'cherry', 
    'lemon', 
    'lime', 
    'orange', 
    'potato', 
    'rutabaga' 
); 
$haySize = count($haystack); 

$loops = isset($_SERVER['argv'][1]) ? $_SERVER['argv'][1] : 10000; 
// echo 'Loops: ' . $loops . "\n"; 

$start = microtime(true); 
for ($i = 0; $i < $loops; $i++) 
{ 
    $needle = $haystack[ $i % $haySize ]; 
} 
$zeroTime = microtime(true) - $start; 
// echo sprintf('%0.3f', $zeroTime * 1000) . ' ms : zero time' . "\n"; 

$start = microtime(true); 
for ($i = 0; $i < $loops; $i++) 
{ 
    $needle = $haystack[ $i % $haySize ]; 
    $dummy = array_search($needle, $haystack); 
} 
echo sprintf('%0.3f', (microtime(true) - $start - $zeroTime) * 1000) . ' ms : array_search' . "\n"; 

$start = microtime(true); 
for ($i = 0; $i < $loops; $i++) 
{ 
    $needle = $haystack[ $i % $haySize ]; 
    $dummy = in_array($needle, $haystack); 
} 
echo sprintf('%0.3f', (microtime(true) - $start - $zeroTime) * 1000) . ' ms : in_array' . "\n"; 
    echo sprintf('%0.3f', (microtime(true) - $start) * 1000).' ms : in_array'."\n"; 

對於一個典型的使用情況下,in_array勝,但不同的是可以忽略不計:

22.662 ms : array_search 
22.104 ms : in_array 

更新2014年1月2日:加入空操作循環到「零刻度」。在新的MacBook Pro上運行PHP 5.4.17,這是一個典型的結果:

24.462 ms : array_search 
24.984 ms : in_array 
0

它取決於您的數組大小。 - 如果你有一小陣(如< 500K的32位密鑰), in_array和array_search給你同樣的性能 isset(數組[針])不得因爲翻轉()

-By大陣列的感覺(像> 1M 32位密鑰) 有in_array和isset(陣列[針])

相關問題