PHP range() from A to ZZ?

后端 未结 12 1131
不思量自难忘°
不思量自难忘° 2020-11-30 06:52

Is it possible to get a range with PHP from A to ZZ*?

a b c ... aa ... zx zy zz

For me this didn\'t work:

range(\'A\', \'ZZ\');
相关标签:
12条回答
  • 2020-11-30 07:14

    Here is a simplified solution in which you can define number of rows and columns you want to generate. This way you will allocate lesser memory.

    // Get cell names for excel
    function generate_excel_cell_names($row_cnt, $col_cnt){
        $excel_cells = [];
    
        // Note: Row and col indexes are starting from 1
        for ($excel_row=1; $excel_row <= $row_cnt; $excel_row++) { 
            $excel_col = 'A';
            for ($col_index = 1; $col_index <= $col_cnt; $col_index++)
            {
                $excel_cells[$excel_row][$col_index] = $excel_col.$excel_row;
                $excel_col++;
            }
        }
        return $excel_cells;
    }
    
    0 讨论(0)
  • 2020-11-30 07:15

    Please check this simple solution incrementing char.

    How to list from A to Z in PHP, and then on to AA, AB, AC, etc

    Use this recursive function to get the exact range from A to ZZ

    function myRange($end_column = '', $first_letters = '') {
        $columns = array();
        $length = strlen($end_column);
        $letters = range('A', 'Z');
    
        // Iterate over 26 letters.
        foreach ($letters as $letter) {
          // Paste the $first_letters before the next.
          $column = $first_letters . $letter; 
          // Add the column to the final array.
          $columns[] = $column;
          // If it was the end column that was added, return the columns.
          if ($column == $end_column)
              return $columns;
        }
    
        // Add the column children.
        foreach ($columns as $column) {
          // Don't itterate if the $end_column was already set in a previous itteration.
          // Stop iterating if you've reached the maximum character length.
          if (!in_array($end_column, $columns) && strlen($column) < $length) {
              $new_columns = myRange($end_column, $column);
              // Merge the new columns which were created with the final columns array.
              $columns = array_merge($columns, $new_columns);
          }
        }
    
        return $columns;
    }
    

    call function like.

    print_r(myRange('ZZ'));
    

    will give you result

    A B C . . . ZX ZY ZZ

    0 讨论(0)
  • 2020-11-30 07:16
    for ($i = 'A'; $i !== 'AC'; $i++){
        echo $i.', '; //A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB,
    }
    

    it's working

    0 讨论(0)
  • 2020-11-30 07:17

    This is as far as I can help you (generate array with A through Z).

    $a = range(65, 90);
    array_walk($a, 'chr');
    

    Check out chr and array_walk

    0 讨论(0)
  • 2020-11-30 07:22

    Just Try this- (tested working fine)

    function createColumnsArray($end_column, $first_letters = '')
    {
      $columns = array();
      $length = strlen($end_column);
      $letters = range('A', 'Z');
    
      // Iterate over 26 letters.
      foreach ($letters as $letter) {
          // Paste the $first_letters before the next.
          $column = $first_letters . $letter;
    
          // Add the column to the final array.
          $columns[] = $column;
    
          // If it was the end column that was added, return the columns.
          if ($column == $end_column)
              return $columns;
      }
    
      // Add the column children.
      foreach ($columns as $column) {
          // Don't itterate if the $end_column was already set in a previous itteration.
          // Stop iterating if you've reached the maximum character length.
          if (!in_array($end_column, $columns) && strlen($column) < $length) {
              $new_columns = createColumnsArray($end_column, $column);
              // Merge the new columns which were created with the final columns array.
              $columns = array_merge($columns, $new_columns);
          }
      }
    
      return $columns;
    }
    echo "<pre>";
    print_r( createColumnsArray('BZ'));
    

    copied from http://php.net/range

    0 讨论(0)
  • 2020-11-30 07:23

    It's not possible with the built-in range:

    Support for character sequences and decrementing arrays was added in 4.1.0. Character sequence values are limited to a length of one. If a length greater than one is entered, only the first character is used.

    However, in essence what you are doing here is counting upwards from 1 in a numeric system that uses the 26 digits a to z. So you can quickly hack together a solution by counting, converting to base 26 (which uses the digits 0 to 9 and a to p) and then "translating" the digits to the range a to z.

    0 讨论(0)
提交回复
热议问题