cari

Rumah  >  Soal Jawab  >  teks badan

Tatasusunan PHP Bagaimana untuk menukar 1,2,4,5,6,7,9,11 dengan elegan kepada rentetan seperti '1,2,4-7,9,11'?

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.

过去多啦不再A梦过去多啦不再A梦2724 hari yang lalu606

membalas semua(2)saya akan balas

  • 我想大声告诉你

    我想大声告诉你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?

    balas
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新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);

    balas
    0
  • Batalbalas