2013-09-01 3 views
3

нужно преобразовать целое число (число столбцов) в строку в соответствии с первенствует схемы столбца имен, например:Преобразование числа в строку для первенствует

1 => A 
2 => B 
25 => Z 
26 => AA 
28 => AC 
51 => BA 

Вы знаете умный и безболезненно способ сделать это в php, или мне нужно написать собственную функцию?

+0

Исправлено значение 51 – Skarlinski

ответ

3

Вы можете сделать это с помощью простого цикла:

$number = 51; 
$letter = 'A'; 
for ($i = 1; $i <= $number; ++$i) { 
    ++$letter; 
} 
echo $letter; 

, хотя, если вы делаете это часто с более высокими значениями, это будет немного медленно

или смотреть на stringFromColumnIndex() метод объекта Cell PHPExcel, что используется именно для этой цели

public static function stringFromColumnIndex($pColumnIndex = 0) { 
    // Using a lookup cache adds a slight memory overhead, but boosts speed 
    // caching using a static within the method is faster than a class static, 
    // though it's additional memory overhead 
    static $_indexCache = array(); 

    if (!isset($_indexCache[$pColumnIndex])) { 
     // Determine column string 
     if ($pColumnIndex < 26) { 
      $_indexCache[$pColumnIndex] = chr(65 + $pColumnIndex); 
     } elseif ($pColumnIndex < 702) { 
      $_indexCache[$pColumnIndex] = chr(64 + ($pColumnIndex/26)) . 
       chr(65 + $pColumnIndex % 26); 
     } else { 
      $_indexCache[$pColumnIndex] = chr(64 + (($pColumnIndex - 26)/676)) . 
       chr(65 + ((($pColumnIndex - 26) % 676)/26)) . 
       chr(65 + $pColumnIndex % 26); 
     } 
    } 
    return $_indexCache[$pColumnIndex]; 
} 

Заметим, что метод индексов PHPExcel от 0, так что вам, возможно, придется настроить его немного, чтобы дать от 1, или уменьшить числовое значение, которое вы передаете

Существует также метод соответствующего columnIndexFromString() в объекте ячейки, которая возвращает числовую из адреса столбца

+0

Отличный ответ! Я всегда знал, что могу наращивать строку в php, но я никогда не догадывался, что она будет складываться так же, как Excel. Большое спасибо. Если бы я написал это, понадобилось бы около 100 строк кода (: – Skarlinski

0

Это также можно сделать довольно легко с чистой PHP:

function getCellFromColnum($colNum) { 
    return ($colNum < 26 ? chr(65+$colNum) : chr(65+floor($colNum/26)-1) . chr(65+ ($colNum % 26))); 
} 
Смежные вопросы