Shortening list of numbers with hyphens between consecutive numbers

后端 未结 2 1828
星月不相逢
星月不相逢 2020-12-16 06:45

Is there a simple way to take a list of numbers which can be in the range 1 - 15. And put a dash in place of consecutive numbers.

So that for example if you had the

相关标签:
2条回答
  • 2020-12-16 06:59
    $n = array (1, 2, 4, 5, 7, 8, 10, 11, 12, 13, 14, 16, 17);
    $lastindex = count($n)-1;
    foreach($n as $k => $i)
    {
        if($k == 0) echo $i;
        elseif($i != $n[$k-1]+1) echo ', ' . $i;
        elseif($k == $lastindex || $i+1 != $n[$k+1]) echo ' - ' . $i;
    }
    

    The function with explode:

    http://codepad.org/DKztLGhe

    function shorten( $numbers ){
      $a = explode(' ',$numbers);
      $lastindex = count($a)-1;
      $s = '';
      foreach( $a as $i => $n ){
        if( $i == 0 )                                    $s .=       $n;
        else if( $a[$i-1]+1 != $n )                      $s .=  ', '.$n;
        else if( $i == $lastindex || $n+1 != $a[$i+1] )  $s .= ' - '.$n;
      }
      return $s;
    }
    
    print_r(shorten('').'<br>');
    print_r(shorten('1').'<br>');
    print_r(shorten('1 2').'<br>');
    print_r(shorten('1 3').'<br>');
    print_r(shorten('1 3 4 6').'<br>');
    print_r(shorten('1 3 4 6 7').'<br>');
    print_r(shorten('1 2 3 4 5').'<br>');
    print_r(shorten('1 2 3 5 6 10 12 13').'<br>');
    
    0 讨论(0)
  • 2020-12-16 07:08
    <?php
    $n = array (1, 2, 3, 5, 6, 7, 10, 12);
    sort ($n);   // If necessary.
    $i = 0;
    while ($i < count ($n))
      {
        if ($i != 0)
          print (", ");
        $rangestart = $i;
        print ($n [$i++]);
        while ($i < count ($n) && $n [$i] == $n [$i - 1] + 1)
          $i++;
        if ($i > $rangestart + 1)
          print (" - " . $n [$i - 1]);
      }
    
    0 讨论(0)
提交回复
热议问题