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\');
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;
}
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
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
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
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
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
.