2010-12-23 77 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(阵列[针])

相关问题