哪个是最好的array_search或in_array?

时间:2010-12-23 11:39:42

标签: php arrays

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

7 个答案:

答案 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_arrayarray_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返回数组的键