前提条件是
1.数组必须是索引数组
2.数组必须是一个排好序的数组(可参考上一篇进行排序)
$a = array(11,13,18,28,29,33,34,52,54,61,68,79,80,84,88,89,92,93,98); $search = 35; $len = count($a); $v1 = binary_search($a, $search, 0, $len-1); echo "结果为:"; var_dump($v1); function binary_search($arr, $s, $begin ,$end) { $mid = floor(($begin+$end)/2); $mid_value = $arr[$mid]; if ($mid_value == $s) { return true; } else if ($mid_value > $s) { if ($begin > $mid-1) { //如果开始位置比结束位置大,表示肯定找不到 return false; } //中间的数比要找的数大,就去左边找 $re = binary_search($arr, $s, $begin, $mid-1); } else { if ($mid+1 > $end) { //如果开始位置比结束位置大,表示肯定找不到 return false; } //中间的数比要找的数小,就去右边找 $re = binary_search($arr, $s, $mid+1, $end); } return $re; }