哪个是最好的array_search或in_array?

2022-08-30 11:22:38

我有一个很大的 while 循环函数,每次加载它以检查当前的URL名称。所以我需要知道哪一个更好,以检查while循环或函数中的大数组中的URL名称。in_array()array_search()


答案 1

如果它是一个大数组并且处于循环中,则两者都不是“最佳”。相反,请在数组上使用array_flip(),以便 url 成为键。并使用 isset() 来检查是否存在。


答案 2

这里没有真正的答案。所以我自己试过了。

$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-01-02:添加了 noop 循环以“零刻度”。在新的MacBook Pro上运行PHP 5.4.17,这是一个典型的结果:

24.462 ms : array_search
24.984 ms : in_array