Rumah > Soal Jawab > teks badan
Sama seperti tajuk
Dengan tatasusunan php
[1,2,4,5,6,7,9,11]
[7,11,16,17,18,33,102,103,555]
Ditukar dengan elegan kepada
'1,2,4-7,9,11'
'7,11,16-18,33,102-103,555'
Bagaimana dengan tali sebegitu?
Terima kasih atas jawapan anda.
我想大声告诉你2017-06-05 11:09:46
Jika anda ingin meletakkan nombor berturut-turut bersama-sama, anda boleh terus menggunakan array_reduce untuk mengira keputusan dan kemudian gunakan implode untuk menyambungkannya menjadi rentetan.
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
Tetapi saya tidak faham corak anda Dalam contoh pertama anda, 1 dan 2 tidak disambungkan, tetapi dalam contoh kedua anda, 102 dan 103 adalah satu kesilapan atau adakah anda mempunyai keperluan khas?
曾经蜡笔没有小新2017-06-05 11:09:46
$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);