使用二分查找法,查找在一维数组中键值的对应键名,
例:查找 array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) 数组中键值为 12 的键名
/** * 二分查找法 * 使用前提是有序数组 */ public function binarySearch($value = 12, $arr = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) ){ $low = 0; //数组下限下标 $high = count($arr)-1; //数组上限下标 // 注意凡是使用到while的时候,一定要防备无限循环的时候,注意终止循环的判断。 while($low <= $high){ //获取中间比较的中间下标(强制整形) $middle = intval(($low + $high)/2); if($value < $arr[$middle]){ //目标值 < 中间值 ,上限减1 $high = $middle - 1; }elseif ($value > $arr[$middle]){ //目标值 > 中间值 ,下限加1 $low = $middle + 1; }else{ return $middle; //目标值 = 中间值,匹配成功返回下标值 } } return -1; }