Implode sorted number array to string by commas and merge intervals

后端 未结 3 1654
不思量自难忘°
不思量自难忘° 2020-12-06 22:33

I would like to implode an array, but with one difference. I would like to merge intervals with a - sign. How can this be done? (The array is ordered!)

3条回答
  •  粉色の甜心
    2020-12-06 23:01

        $oldArray=array(2,4,5,6,8,10);
    
        $newArray=array();
    
    
        foreach($oldArray as $count=>$val){
            if($count==0){
                //begin sequencing
                $sequenceStart=$sequenceEnd=$val;
            }
    
            if($val==$sequenceEnd+1){
                $sequenceEnd=$val;
                continue;
            }else{
                if($sequenceEnd==$val){
                    //do nothing
                    continue;
                }
    
    
            }
    
            //new sequence begins 
            //save new sequence
            if($sequenceStart==$sequenceEnd){
                //sequnce is a single number
                $newArray[]=$sequenceEnd;
            }else{
                $newArray[]=$sequenceStart.'-'.$sequenceEnd;
            }
    
            //reset sequence
            $sequenceStart=$sequenceEnd=$val;
        }
    
        //new sequence begins 
        //save new sequence
        if($sequenceStart==$sequenceEnd){
            //sequnce is a single number
            $newArray[]=$sequenceEnd;
        }else{
            $newArray[]=$sequenceStart.'-'.$sequenceEnd;
        }
    
        //reset sequence
        $sequenceStart=$sequenceEnd=$val;
    
    
    
        return implode(',', $newArray);
    

提交回复
热议问题