<?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);
$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));
?>