$arr = [2,3,4,5,8,10,11,12,13,16,19];
转换成字符串
2-5,8,10-13,16,19
个人的思路是把 8 16 19 这种两边都不靠的挑选出来,这种 2 3 4 5 再选择一个最大值最小值。
记下起点值,往后扫,连续则继续往后,否则记下终点值,得到一个beg-end或者beg。continue...
$arr=array(2,3,4,5,8,10,11,12,13,16,19); //最大值 $max=max($arr); //求和 $sun=array_sum($arr); //排序 asort($arr); //a1为标准数组,用来判断值是否存在 //a2用来存放已经被使用过的数 //a3为最后的结果数组 foreach ($arr as $key => $value) { $a1[$value]=$value; } foreach ($arr as $key => $value) { if(!isset($a2[$value])){ $start=$value; $end=$value; $a2[$value]=$value; for($i=0;$i<$sun;$i++){ $end = $end+1; if(isset($a1["$end"])){ $a2[$end]=$end; }else{ $end =$end-1; if($start==$end){ $a3 []= $start; }else{ $a3 []= $start."-".$end; } //断开了,跳出循环 break; } } } } echo '<pre>'; var_dump($a3); die;
将数组按每5个拆分,再对子数组进行处理。
记下起点值,往后扫,连续则继续往后,否则记下终点值,得到一个beg-end或者beg。continue...
将数组按每5个拆分,再对子数组进行处理。