我有一个大的while循环函数,每次加载以检查当前的URL名称.所以我需要知道在while循环或函数中检查大数组中的URL名称
更好.in_array()
array_search()
mar*_*rio 58
如果它是一个大型数组并且在一个循环中,那么它们都不是"最佳".而是array_flip()
在您的阵列上使用,因此网址成为密钥.并isset()
用来检查存在.
Pat*_*her 52
这里没有真正的答案.所以我自己试了一下.
$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";
Run Code Online (Sandbox Code Playgroud)
对于典型的用例,in_array获胜,但差异可以忽略不计:
22.662 ms : array_search
22.104 ms : in_array
Run Code Online (Sandbox Code Playgroud)
更新2014-01-02:将noop循环添加到"零刻度".在新的MacBook pro上运行PHP 5.4.17,这是一个典型的结果:
24.462 ms : array_search
24.984 ms : in_array
Run Code Online (Sandbox Code Playgroud)
eck*_*kes 40
基于的文件上in_array和array_search,我认为这主要取决于你想要的信息做什么:如果你需要进入,使用array_search
,如果你只是想检查,如果阵列中存在的网址,in_array
应该足够.
小智 6
它是不同的函数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
Run Code Online (Sandbox Code Playgroud)