84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
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连起来了,是失误还是你有特殊需求?