我有一個大while循環功能,每次被加載的檢查與當前URL名時間。 所以我需要知道哪一個更好,在while循環內檢查URL大陣列, in_array()
或array_search()
函數。這是最好的array_search或in_array?
回答
基礎的in_array和array_search的文件上,我認爲,這主要取決於你想要的信息做什麼:如果你需要的條目,使用array_search
,如果你只是想檢查是否存在網址在陣列中,in_array
應該足夠了。
如果它是一個大陣和在一個循環中,無論是「最好的」。而是在您的陣列上使用array_flip()
,因此網址成爲關鍵字。並使用isset()
檢查是否存在。
謝謝馬里奧,這是另一種方法。但將該函數與in_array和array_search函數相比較,該函數是否會給出速度結果? – Thilak 2010-12-25 06:33:51
PHP在檢查鍵的存在方面比檢查值快得多。如果您需要經常參考的大量唯一值,請始終將它們設置爲鍵。 – 2014-01-03 07:40:30
爲此,原始值必須是整數或字符串。雖然它適用於OP的問題,但它不能用作一般解決方案。 – 2014-07-30 17:56:07
如果你唯一的目標就是要檢查是否有URL數組我會去in_array中存在。儘管最好的方法是設置鍵,所以你可以通過數組鍵來搜索。這樣你節省了很多循環。
$searchword = "test";
echo $array[$searchword];
它的不同功能 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
這裏有沒有真正的答案。所以我嘗試了,我自己。
$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
它取決於您的數組大小。 - 如果你有一小陣(如< 500K的32位密鑰), in_array和array_search給你同樣的性能 isset(數組[針])不得因爲翻轉()
-By大陣列的感覺(像> 1M 32位密鑰) 有in_array和isset(陣列[針])
- 1. array_search/in_array無法找到字符串
- 2. 使用更好的函數 - array_unique或array_search
- 3. 這是最好的$這樣或自我或靜態常量引用變量時?
- 4. 字典或多個數組的數組,這是最好的?
- 5. 在Android中這是最好的:在代碼或資源
- 6. 這是一個最好的jQuery或JavaScript圖書館?我
- 7. WCF Web服務 - 這是最好的basicHttpBinding或netTcpBinding
- 8. 這是最好的表現故事板或.Xib文件?
- 9. 這是最好的Android自動化葫蘆或UIAutomator api
- 10. 這是最好的JavaScript動畫框架?
- 11. 這是最好的python mongodb lib
- 12. 這是最好的方法嗎?
- 13. 這是檢查isarray的最好方法
- 14. 這是最好的索引嗎?
- 15. in_array或等於'x'
- 16. 這是最好的書或教程或博客開始的Symfony 2
- 17. 這是很好的PHP_SELF或phpfilename.php
- 18. 這是更好的ScheduledExecutorService或AlarmManager在Android?
- 19. 什麼是最好的WP7:SQLite或Data.Linq?
- 20. 只是好奇的最好的方式,使這個Java程序
- 21. 這是否需要更好的代碼或更好的硬件?
- 22. 這是最好的最輕的jQuery的富文本編輯器
- 23. 什麼是最好的Android佈局或Canvas或SurfaceView或Cocos2d android?
- 24. Express req.body爲空。這是做這件事的最好方法嗎?
- 25. 這是做這件事的最好方法嗎?
- 26. 使用date()與in_array()或array_key_exists()
- 27. php array - in_array和/或array_intersect
- 28. array_search的問題
- 29. PHP array_search
- 30. 這是實現AsyncTask的最佳方式嗎?或者有更好的方法嗎?
取決於時間,這是最好之間真正大的差異? – Thilak 2010-12-25 06:37:20
經過長時間的參考,並取決於我的要求,我選擇了in_array函數。 – Thilak 2010-12-28 11:57:09