0

Using PHP, how can I convert an Excel style column name, like "CF", into a number (CF=84)? This question specifically pertains to PHP. Please don't "dupe" this with an answer for a different language.

azBrian
  • 661
  • 1
  • 5
  • 19
  • 2
    dupe: http://stackoverflow.com/questions/5554369/php-how-to-output-list-like-this-aa-ab-ac-all-the-way-to-zzzy-zzzz-zzzza –  Mar 16 '17 at 20:33
  • Possible duplicate of [Excel column number from column name](http://stackoverflow.com/questions/10106465/excel-column-number-from-column-name) – MarianD Mar 16 '17 at 22:16
  • @nogad, possibly but when I was searching for a solution I did not find that question because it is for a different utility. – azBrian Mar 16 '17 at 23:38
  • @MarianD, It is not a duplicate of that question. This Q&A specifically is related to PHP use. – azBrian Mar 16 '17 at 23:39
  • 1
    Oh, you are right, please accept my apology. – MarianD Mar 17 '17 at 16:19

1 Answers1

1

Try these functions.

/**
 * Convert Excel style column names into numbers.
 * @param string $column Excel style column name like AA or CF
 * @return integer Number with A being 1 and AA being 27
 */

function alpha2num($column) {
    $number = 0;
    foreach(str_split($column) as $letter){
        $number = ($number * 26) + (ord(strtolower($letter)) - 96);
    }
    return $number;
}

/**
 * Access array value with Excel style column name.
 * @param array $array The array to access
 * @param string $column Excel style column name like AA or CF
 * @return mixed Value found at the column
 */
function alpha_col($array, $column){
    $i = alpha2num($column) - 1;
    return isset($array[$i]) ? $array[$i] : false;
}
azBrian
  • 661
  • 1
  • 5
  • 19
  • 2
    [PHPExcel does it a bit differently, if you're interested.](https://github.com/PHPOffice/PHPExcel/blob/1c8c2379ccf5ab9dd7cb46be965821d22173bcf4/Classes/PHPExcel/Cell.php#L790) – Don't Panic Mar 16 '17 at 20:54
  • I saw that but to me it looked like a dirty method, albeit robust. – azBrian Mar 16 '17 at 23:42
  • 1
    I just thought you might be interested in some of their observations on `ord` and `strtolower` performance impacts. I agree your way looks neater. – Don't Panic Mar 16 '17 at 23:46
  • If you were building a library, like PHPExcel did, I would be more concerned with performance. When I wrote the functions I was working on a simple CSV import system. – azBrian Mar 16 '17 at 23:49
  • 1
    Makes sense. I didn't intend to be critical. I just thought you'd find it interesting if you hadn't seen it already. – Don't Panic Mar 16 '17 at 23:52
  • I appreciate the feedback! – azBrian Mar 17 '17 at 04:26
  • Note: the code PHPExcel uses in the link above is no longer valid in newer PHP versions - 'Deprecated: Array and string offset access syntax with curly braces is deprecated' – kasimir Jul 16 '21 at 13:26