原理:每次拿目标数值(以下用a表示)与数组中间位置的数据(以下用b表示)进行比较,如果a大于b,继续将a与大于b部分的中间位置的值进行比较;如果a小于b,继续将a与小于b部分的中间位置值进行比较。
function BinarySearch($arr,$num)
{
if(!is_array($arr) || empty($arr)){
return false;
}
$len = count($arr);
$min = 0;
$high = $len-1;
while($min<=$high){
$mid = intval(($high+$min)/2);
if($arr[$mid]>$num){
$high = $mid-1;
}elseif($arr[$mid]<$num){
$min = $mid+1;
}else{
return $mid;
}
}
return false;
}
$arr = [2,3,4,5,6,7,9,11,13,22];
$key = BinarySearch($arr,3);
var_dump($key);