<?php
function letterToColumnNumber(string $letters, int $indexStart = 0): int
{
static $ordA = ord('A');
$length = strlen($letters);
$number = 0;
$pow = 1;
for ($i = $length - 1; $i >= 0; $i--) {
// calculate the value of each letter and add to the total
$number += (ord($letters[$i]) - $ordA + 1) * $pow;
$pow *= 26;
}
return $number - (1 - $indexStart);
}
function rangeStringToRangeArray(string $range, int $indexStart = 0): array
{
// Parse Excel range expression
if (sscanf($range, '%[A-Z]%d:%[A-Z]%d', $startCol, $startRow, $endCol, $endRow) != 4) {
throw new Exception('Invalid range expression');
}
return [
[
letterToColumnNumber($startCol, $indexStart),
$startRow - (1 - $indexStart)
],
[
letterToColumnNumber($endCol, $indexStart),
$endRow - (1 - $indexStart)
]
];
}
echo json_encode(rangeStringToRangeArray('A1:B2')); // returns [[0,0],[1,1]]
echo json_encode(rangeStringToRangeArray('A1:B2', 1)); // returns [[1,1],[2,2]]
- Output for 8.3.0 - 8.3.26, 8.4.1 - 8.4.13
- [[0,0],[1,1]][[1,1],[2,2]]
- Output for 8.1.0 - 8.1.33, 8.2.0 - 8.2.29
- Fatal error: Constant expression contains invalid operations in /in/679Dp on line 5
Process exited with code 255.
preferences:
68.61 ms | 407 KiB | 5 Q