二进制in_array搜索

时间:2012-08-07 23:49:27

标签: php arrays

我使用了很多in_array函数,这似乎让我的加载时间陷入困境。我在in_array php documentation中找到了以下代码。作者声明“这个函数比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;
}

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

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:5)

此功能执行二分查找。它仅在数组已排序时有效。

P.S。声称它的工作速度“快五倍”非常有趣。