我有一个很大的while循环函数,每次加载它以检查当前的 URL 名称。
所以我需要知道在while循环中检查大数组中的 URL 名称会更好,
in_array()
或array_search()
功能。
答案 0 :(得分:58)
如果它是循环中的大数组和,则两者都不是“最佳”。而是在您的阵列上使用array_flip()
,以便网址成为密钥。并使用isset()
检查是否存在。
答案 1 :(得分: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";
对于典型的用例,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
答案 2 :(得分:36)
根据in_array和array_search的文档,我认为这主要取决于您要对信息做什么:如果您需要输入,请使用array_search
,如果你只想检查数组中是否存在url,那么in_array
就足够了。
答案 3 :(得分: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
答案 4 :(得分:0)
如果您的唯一目标是检查数组中是否存在URL,我会去in_array。最好的方法是设置键,这样你就可以按数组键搜索。这样你可以节省很多循环。
$searchword = "test";
echo $array[$searchword];
答案 5 :(得分:0)
这取决于您的阵列大小。 - 如果你有一个小数组(如&lt; 500k 32bit-key), in_array和array_search为您提供相同的性能 因为flip()
,isset(array [needle])没有任何意义- 大数组(例如&gt; 1m 32位密钥) in_array和isset(array [needle])
之间有很大的区别答案 6 :(得分:-1)
array1=array("a"=>"one","b"=>"two");
if(in_array("one",$array))
{
echo "array exit";
}
else
{
echo " array not exist";
}
echo "</br>";
//example of array_search():
$b1=array("a"=>"one","b"=>"two");
echo array_search("one",$b1);
in_array返回true和false值,以及array_search返回数组的键