Home » Php » php – which is best array_search or in_array?

php – which is best array_search or in_array?

Posted by: admin April 23, 2020 Leave a comment


I have a large while loop function, every time it gets loaded for check with current URL name.
So I need to know which one is better to check the URL name in large array within the while loop,
in_array() or array_search() function.

How to&Answers:

Based on the documentation of in_array and array_search, I’d think that it mainly depends on what you want to do with the information: if you need the entry, use array_search, if you just want to check if the url exists in the array, in_array should be enough.


If it’s a large array and in a loop, neither is “best”. Instead use array_flip() on your array, so urls become keys. And use isset() to check for the presence.


There’s no real answer here. So I tried it, myself.

$haystack = array
$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";

For a typical use case, in_array wins, but the difference is negligible:

22.662 ms : array_search
22.104 ms : in_array

Updated 2014-01-02: added noop loop to “zero the scale”. Running PHP 5.4.17 on a new MacBook pro, this is a typical result:

24.462 ms : array_search
24.984 ms : in_array


it’s different function
in_array – return true if find value
array_search – return position if find value

$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


If you’re only goal is to check if an URL exists in the array I’d go for in_array. Altough the best way is having keys set so you can just search by array key. That way you save alot of looping.

$searchword = "test";
echo $array[$searchword];


It’s up to your array-size.
-If you have a small array(like < 500k 32bit-key),
in_array and array_search give you same performance
isset(array[needle]) make no sense because of flip()

-By big arrays(like > 1m 32bit key)
There are really big difference between in_array and isset(array[needle])



  echo "array exit"; 
     echo " array not exist"; 

echo "</br>";
//example of array_search():
    echo array_search("one",$b1); 

in_array return true and false value and array_search return key of the array