2

我使用了很多in_array功能,这似乎拖慢了我的加载时间。in_array我在php 文档中找到了以下代码。作者说“这个函数比 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.

4

2 回答 2

9

它执行二进制搜索,假设数组是按总排序的。如果数组没有排序,它将失败。

于 2012-08-07T23:52:25.610 回答
5

该函数进行二分查找。它仅在数组已排序时才有效。

PS声称它“快五倍”的说法很有趣。

于 2012-08-07T23:53:34.787 回答