- <?php
- /**
- * 比较函数
- * @param scalar $var1
- * @param scalar $var2
- * return bool
- */
- function compare($var1,$var2)
- {
- if($var1>$var2)
- {
- return 1;
- }
- elseif($var1==$var2)
- {
- return 0;
- }
- else
- {
- return -1;
- }
- }
- /**
- * 二分查找 重构的代码 支持关联数组
- * return index 查找目标数字所在的索引
- */
- function binsearch_2($var=array(),$searchnum,$type=true)
- {
- reset($var);
- $key=key($var);
- while($key!==null) //$key可能为0 所以要用!==null判断
- {
- $_map[]=$key; //键值映射
- next($var);
- $key=key($var);
- }
- echo '<pre>';
- print_r($_map);
- $left_border = 0;
- $right_border = count($_map)-1;
- while($left_border<=$right_border)
- {
- $middle=intval(($left_border+$right_border)/2);
- switch(compare($var[$_map[$middle]],$searchnum))
- {
- case -1:
- if($type)
- {
- $left_border = $middle+1;
- }
- else
- {
- $right_border = $middle-1;
- }
- break;
- case 0:
- return $_map[$middle];
- case 1:
- if($type)
- {
- $right_border = $middle-1;
- }
- else
- {
- $left_border = $middle+1;
- }
- break;
- }
- }
- echo '没有匹配项';
- return false;
- }
- $arr=array('a'=>1,2,3,4,5,6,7,'b'=>8,9,10,11,'c'=>12);
- $index = binsearch_2($arr,12,true);
- echo $index;
- echo $arr[$index];
- ?>
- //该片段来自于http://www.codesnippet.cn/detail/270620134339.html
来源: http://www.codesnippet.cn/detail/270620134339.html