二进制in_array搜索

Ale*_*lex 0 php arrays

我使用了很多in_array功能,似乎让我的加载时间陷入困境.我在in_arrayphp文档中找到了以下代码.作者声明"这个函数比in_array()快五倍.它使用二进制搜索,应该可以用作直接替换."

function fast_in_array($elem, $array) 
{
   $top = sizeof($array) -1;
   $bot = 0;
   while($top >= $bot) 
   {
      $p = floor(($top + $bot) / 2);
      if ($array[$p] < $elem) $bot = $p + 1;
      elseif ($array[$p] > $elem) $top = $p - 1;
      else return TRUE;
   }
   return FALSE;
}
Run Code Online (Sandbox Code Playgroud)

然而这个功能起作用,但只有一半的时间,有时它不会输出它应该输出的所有内容,例如,如果我有一个苹果,橙子和柠檬的数组,并且匹配苹果和橙子它只会打印橙子或一些奇怪的东西.有人可以向我解释这个脚本到底是做什么的,以及为什么它不能替代它in_array.

Ant*_*ony 8

它执行二进制搜索,假设数组按排序的总顺序排列.如果数组未排序,则会失败.


小智 5

此函数执行二进制搜索.它仅在数组排序时有效.

PS声称它的工作速度"快五倍"非常有趣.