Genau wie der Titel
Mit PHP-Array
[1,2,4,5,6,7,9,11] [7,11,16,17,18,33,102,103,555]
Elegant umgewandelt in
'1,2,4-7,9,11' '7,11,16-18,33,102-103,555'
Wie wäre es mit so einer Saite?
Vielen Dank für Ihre Antwort.
如果是要把连续的数字拼起来,可以直接用个array_reduce计算结果再用implode拼接成字符串。
function array_hyphens($arr){ return implode(',',array_reduce($arr,function($a,$num){ if(!($len=count($a))) return array($num); @list($s,$e) =explode('-',$a[--$len]); if($s==$num-1 || (isset($e) && $e==$num-1)) $a[$len]=implode('-',array($s,$num)); else array_push($a,$num); return $a; },array())); } echo array_hyphens([7,11,16,17,18,33,102,103,555]); // 7,11,16-18,33,102-103,555
不过我看不懂你的规律,你第一个例子里1和2没有连起来,第二个例子102和103连起来了,是失误还是你有特殊需求?
$a1=array(1,2,3,5,6,10,15,28,89,90,91,92,93); $count=count($a1); foreach ($a1 as $key => $value) { if(empty($a2)){ $a2['min']=$value; $a2['max']=$value; }else{ if(($value-$a2['max']==1)&&($key<>$count-1)){ $a2['max']=$value; }else{ if($a2['min']==$a2['max']){ $a3[]=$a2['min']; }else{ $a3[]=$a2['min'].'-'.$a2['max']; } $a2['min']=$value; $a2['max']=$value; } } } echo '<pre>';var_dump($a3);
如果是要把连续的数字拼起来,可以直接用个array_reduce计算结果再用implode拼接成字符串。
不过我看不懂你的规律,你第一个例子里1和2没有连起来,第二个例子102和103连起来了,是失误还是你有特殊需求?