编辑代码

<?php
function unique_rand($min, $max, $num) {
    $count = 0;
    $return = array();
    while ($count < $num) {
        $return[] = mt_rand($min, $max);
        $return = array_flip(array_flip($return));
        $count = count($return);
    }
    shuffle($return);
    return $return;
}

function _checkVal($min,$max,$target) {
    if ($target > $min && $target < $max) {
        return array($min,$max);
    } else {
        return false;
    }
}

function binarySearch($array, $val) {
    sort($array);
    $count = count($array);
    $left = 0;
    $right = $count - 1;
    $_times=0;
    while ($left <= $right) {
        $_times++;
        print_r($_times);
        $mid = intval(($left + $right) / 2);
        $midVal=$array[$mid];
        if ($midVal == $val) { //如果找到了相等的值就退出
            return arryy($mid,$mid);
        } else if ($midVal < $val) { //如果 中值小于目标值,则继续查找右边的数组
            $_tmp=_checkVal($midVal,$array[$mid+1],$val); //中间值小于 目标值时,再与 中值的下一个比较,如果下一个值比目标值大就退出了
            if ($_tmp) return $_tmp;
            $left=$mid;

        } else {
            $_tmp=_checkVal($array[$mid-1],$midVal,$val); //中间值大于 目标值时,再与 中值的上一个比较,如果上一个值比目标值小就退出了
            if ($_tmp) return $_tmp;
            $right = $mid;
        }
    }
    return false;
}


function _filterMax($v)
{
   return $v >= $GLOBALS['targetNum'] ;
}
function _filterMin($v)
{
    return $v <= $GLOBALS['targetNum'] ;
}

function filterSearch($array, $val) {
    sort($array);
    $maxArr=array_filter($array,function($v){
        return $v >= $GLOBALS['targetNum'] ;
    });
    $minArr=array_filter($array,function($v){
        return $v <= $GLOBALS['targetNum'] ;
    });
   
    $min=array_pop($minArr);
    $max=array_shift($maxArr);
    return array($min,$max);

}



    $array=unique_rand(1,100,50);
    //print_r($array);
	$targetNum= 59;

    print_r ("binarySearch\n");
    print_r (microtime(true)."\n" );
	print_r (binarySearch($array, $targetNum));
    print_r (microtime(true)."\n" );
 
    print_r ("filterSearch \r\n");
    print_r (microtime(true)."\n" );
	print_r (filterSearch($array, $targetNum));
    print_r (microtime(true));
     

/*      print_r ("getSideNumber \r\n");
    print_r (microtime(true)."\n" );
	print_r (getSideNumber($array, $targetNum));
    print_r (microtime(true));
  */
    

?>