質問: 順序付き配列の場合、指定された値が配列内に存在するかどうかを確認する方法。
アイデア: 存在するかどうかを判断する最も簡単な方法は、配列を直接ループして各値を比較することです。しかし、順序付けされた配列の場合、このように記述すると、「順序付けされた」機能を完全に活用できません。
関連する学習の推奨事項: php プログラミング (ビデオ)
すべて「二分検索」を使用します。
//有序数组为 $arr = array(2,5,66,87,954,1452,5865); //查找值 $str = 1452; //我们先定义 三个参数 $front = 0;//一个开始值下标 $end = count($arr) - 1;//一个结束值下标 $mid = intval(($front + $end) / 2);//中间值下标
1. 最初の比較では、検索値 str が中間値 Mid に等しいかどうかを直接判断し、等しい場合は直接 true を返します;
2. 検索値 str がより大きい場合中間値mid、それは検索値strを意味します。中間値の右側にある可能性があります。つまり、開始値frontは再割り当てする必要があります=中間値mid 1、終了値endは再割り当てする必要はありません。中間値 Mid は、順番に新しい開始値と終了値になります;
3. 値を探している場合 str が中間値 Mid より小さい場合、検索値 str であることを意味します。は中間値の左側にある可能性があります。つまり、開始値を変更する必要はなく、終了値 end を再割り当てする必要があります = 中間値 - 1、中間値 Mid は開始値であり、新しい値です。終了値を順に;
-----上記と同様に、受信した開始値、終了値、中間値を比較します。開始値が終了値より大きい場合は、その値が見つからなかったことを意味し、クエリは終了します。それ以外の場合は、見つかったことが返されます。
具体的なコードは次のとおりです:
$str = 89;//查找值 $arr = [1,55,66,89,420];//有序数组 $ren = find($arr, $str); echo '<pre class="brush:php;toolbar:false">'; var_dump($ren); function find($arr, $str){ $front = 0;//开始下标 $end = count($arr) - 1;//结束下标 while($front <= $end){//结束值 大于 开始值 ,反之则退出 $mid = intval(($front + $end) / 2);//中间值下标 if($str == $arr[$mid]){ return $mid;//存在直接返回值的下标 } if($str > $arr[$mid]){ $front = $mid + 1;//在前面 } if($str < $arr[$mid]){ $end = $mid - 1;//在后面 } } return false; }
戻り結果: 89 は 4 番目の要素値の添字 3
int(3)
関連する学習に関する推奨事項: プログラミング ビデオ
以上がPHP で順序付けられた配列に特定の値が含まれているかどうかを確認する方法を学習します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。