2

多くのin_array機能を使用しているため、読み込み時間が遅くなるようです。in_arrayPHPドキュメントで次のコードを見つけました。ライターは、「この関数は in_array() よりも 5 倍高速です。バイナリ検索を使用するため、直接の代替として使用できるはずです」と述べています。

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 「5 倍速く」動作するという主張はかなり面白いです。

于 2012-08-07T23:53:34.787 に答える