32

PHPでAからZZ*までの範囲を取得することは可能ですか?

abc ... aa ... zx zy zz

私にとってこれはうまくいきませんでした:

range('A', 'ZZ');

これはPHPExcel用であり、すべての列で実行する最高のフィールドとしてBEを提供します。この場合、私はA、Bのみを取得します。

range ('A', 'BE')
4

15 に答える 15

62

文字を「perlスタイル」でインクリメントするPHPの機能を利用する

$letters = array();
$letter = 'A';
while ($letter !== 'AAA') {
    $letters[] = $letter++;
}

ただし、単純な整数値を使用して、PHPExcelの組み込みのPHPExcel_Cell :: stringFromColumnIndex()メソッドを利用することもできます。

編集

PHP 5.5以降では、ジェネレータを使用して、実際に配列をメモリに構築することを回避することもできます。

function excelColumnRange($lower, $upper) {
    ++$upper;
    for ($i = $lower; $i !== $upper; ++$i) {
        yield $i;
    }
}

foreach (excelColumnRange('A', 'ZZ') as $value) {
    echo $value, PHP_EOL;
}
于 2013-01-11T13:03:17.087 に答える
18

これを試してみてください-(正常に動作することがテストされています)

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'));

http://php.net/rangeからコピー

于 2013-01-11T12:59:36.750 に答える
15
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,
}

それは働いています

于 2014-08-31T09:05:18.243 に答える
7

2つのforeachループを組み合わせて、そのようなものを生成できます。

// Single letters
foreach(range('A', 'Z') as $letter) {
    echo $letter;
}

// AA-ZZ combinations
foreach(range('A', 'Z') as $letter1) {
    foreach(range('A', 'Z') as $letter2) {
        echo $letter1 . $letter2;
    }
}
于 2013-01-11T13:01:04.967 に答える
2

ビルトインでは不可能ですrange

文字シーケンスとデクリメント配列のサポートが4.1.0で追加されました。文字シーケンス値は1の長さに制限されています。1より大きい長さを入力すると、最初の文字のみが使用されます。

aただし、基本的に、ここで行っているのは、26桁を使用する数値システムで1から上向きにカウントすることzです。0したがって、カウントし、基数26( to9atoの数字を使用)に変換してから、数字をの範囲にp「変換」することで、ソリューションをすばやくまとめることができます。az

于 2013-01-11T12:57:32.350 に答える
2

さらに良いオプション(うまく機能している)

for ($i = 'a'; $i < 'zz'; $i++) 
    echo $i."<br>";
于 2013-01-11T13:41:02.437 に答える
1

もちろん、phpのrange()関数はこれをサポートしていないように見えるので、これを行うための独自の関数を作成することもできます。範囲関数を別のループにネストできるので、これは簡単な作業です。このようなもの:

foreach(range('a', 'z') as $outer) {
  foreach(range('a', 'z') as $inner) {
    print($outer.$inner);
  }
}
于 2013-01-11T13:00:11.287 に答える
1

charをインクリメントするこの単純なソリューションを確認してください。

PHPでAからZにリストし、次にAA、AB、ACなどにリストする方法

この再帰関数を使用して、Aから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;
}

のような関数を呼び出します。

print_r(myRange('ZZ'));

結果が出ます

ABC。。。ZX ZY ZZ

于 2017-02-23T11:33:10.257 に答える
0

これは、生成する行と列の数を定義できる単純化されたソリューションです。このようにして、より少ないメモリを割り当てます。

// 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;
}
于 2018-10-28T23:35:29.017 に答える
0

これは私にとってはうまくいきます。

function create_columns_range($start = 'A', $end = 'ZZ'){
    $return_range = [];
    for ($i = $start; $i !== $end; $i++){
        $return_range[] = $i;
    }
    return $return_range;
}

使用するには、次の電話番号に電話してください。

$range = create_columns_range('A', 'ZZ');
print_r(range);
于 2021-10-19T17:44:47.850 に答える
-1

これは私があなたを助けることができる限りです(AからZで配列を生成します)。

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

chrarray_walkをチェックしてください

于 2013-01-11T12:58:16.673 に答える
-1

alpha2num()を使用してアルファを数値に変換し、ループで使用します。これにより、開始と終了の任意の値を使用して範囲を取得できます。

// to convert alpha to number
function alpha2num($a) {
    $l = strlen($a);
    $n = 0;
    for($i = 0; $i < $l; $i++)
        $n = $n*26 + ord($a[$i]) - 0x40;

    return $n-1;
}

// to convert number back to alpha
function num2alpha($n)
{
    for($r = ""; $n >= 0; $n = intval($n / 26) - 1)
    $r = chr($n%26 + 0x41) . $r;
    return $r;
}

function get_range($start_column, $end_column)
{
    $s = alpha2num($start_column); // get start number
    $e = alpha2num($end_column); // get end num

    $columns = array();

    // loop from start to end and change back the number to alpha to be stored in array
    for($i=$s; $i<=$e; $i++)
        $columns[] = num2alpha($i);

    return $columns;
}

// usage
$columns = get_range('Z', 'BA'));
于 2013-05-16T01:05:55.767 に答える
-1
$atoz = range('A', 'Z');
$target = range('A', 'Z');

$result = $atoz;
foreach ($target as $val) {
    $step = array_map(function ($elem) use ($val) {
            return $val. $elem;
        }, $atoz);

    $result = array_merge($result, $step);
}
于 2020-11-13T03:18:03.653 に答える
-1
$abc = [];
foreach(range('A', 'Z') as $first) {
    array_push($abc, $first);
}

foreach(range('A', 'Z') as $second) {
  foreach(range('A', 'Z') as $third) {      
      array_push($abc, $second.$third);
  }
}

$headers = ['CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO', 'CAMPO'];

foreach($headers as $key => $value) {
  echo $abc[$key] . ' - ' . $value . PHP_EOL;
}
于 2021-04-30T22:03:16.713 に答える
-1
$alfabet=["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","AC","AD","AE","AF","AG","AH","AI","AJ","AK","AL","AM","AN","AO","AP","AQ","AR","AS","AT","AU","AV","AW","AX","AY","AZ","BA","BB","BC","BD","BE","BF","BG","BH","BI","BJ","BK","BL","BM","BN","BO","BP","BQ","BR","BS","BT","BU","BV","BW","BX","BY","BZ","CA","CB","CC","CD","CE","CF","CG","CH","CI","CJ","CK","CL","CM","CN","CO","CP","CQ","CR","CS","CT","CU","CV","CW","CX","CY","CZ","DA","DB","DD","DD","DE","DF","DG","DH","DI","DJ","DK","DL","DM","DN","DO","DP","DQ","DR","DS","DT","DU","DV","DW","DX","DY","DZ"];

 $active_row_value_fulladdress = "AA - AM";
 //$active_row_value_fulladdress = "A - F";
 $taken_full = strtoupper($active_row_value_fulladdress);

$taken_full_ar = explode("-", $taken_full);
$start = trim($taken_full_ar[0]);
$end   = trim($taken_full_ar[1]);

$alfabet_key = array_flip($alfabet);
$start1 = $alfabet_key[$start];
$end1   = $alfabet_key[$end];

for($i=$start1;$i<=$end1;$i++)
{
    $taken_full_array[]=$alfabet[$i];
}

foreach ($taken_full_array as $key => $value) 
{
    $full_add[]=array_search($value,$alfabet);
}

echo "<pre>";
print_r($taken_full_array);
print_r($full_add);
于 2021-07-07T11:54:47.617 に答える