Диапазон PHP () от A до ZZ?

Можно ли получить диапазон с PHP от A до ZZ *?

abc … aa … zx zy zz

Для меня это не сработало:

range('A', 'ZZ'); 

Это для PHPExcel, когда он дает BE как самое высокое поле, которое я бы пробежал по всем колонам. В этом случае я получаю только A, B:

 range ('A', 'BE') 

Solutions Collecting From Web of "Диапазон PHP () от A до ZZ?"

Просто попробуйте это (проверенный рабочий режим)

 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

Воспользуйтесь возможностью PHP наращивать символы "perl-style"

 $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; } 

Вы можете комбинировать две петли 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; } } 
 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, } 

работает

Это невозможно во встроенном range :

Поддержка последовательностей символов и декрементных массивов была добавлена ​​в 4.1.0. Значения последовательности символов ограничены длиной одного. Если введена длина больше единицы, используется только первый символ.

Однако, по существу, вы здесь делаете подсчет вверх от 1 в числовой системе, которая использует 26 цифр от a до z . Таким образом, вы можете быстро взломать решение путем подсчета, преобразования на базу 26 (который использует цифры от 0 до 9 и от a до p ), а затем «перевод» цифр в диапазон от a до z .

Еще лучший вариант (отлично работает)

 for ($i = 'a'; $i < 'zz'; $i++) echo $i."<br>"; 

Вы могли бы, конечно, написать свою собственную функцию, чтобы сделать это, поскольку кажется, что функция range () в php не поддерживает это. Это должно быть простой задачей, поскольку вы можете просто вложить функцию диапазона в другой цикл. Что-то вроде этого:

 foreach(range('a', 'z') as $outer) { foreach(range('a', 'z') as $inner) { print($outer.$inner); } } 

Это насколько я могу вам помочь (создать массив с A по Z).

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

Проверьте chr и array_walk

Я использую 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')); 

Используйте эту рекурсивную функцию для получения точного диапазона от 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')); 

даст вам результат

A B C. , , ZX ZY ZZ