Я реализую некоторые функции экспорта с помощью PHPExcel.
Поскольку PHP может автоматически увеличивать алфавит, он работал нормально, но у меня возникла проблема при попытке уменьшить его.
Я могу уменьшить один символ, например $decremented = chr(ord($someChar) - 1);, но он не работает с двумя символами (такими как «AA», «BB» и т. д.)
Есть ли способ уменьшить два символа? Как 'ZZ' -> 'ZX', 'AA' -> 'Z'
Любая помощь или мысли будут очень признательны!
Но наверняка вы должны были сделать что-то похожее при увеличении, чтобы при увеличении Z вы получали AA






Вот функция декремента, которая подойдет вам:
function decrement($str) {
$index = strlen($str)-1;
$ord = ord($str[$index]);
if ($ord > 65) {
// The final character is still greater than A, decrement
return substr($str, 0, $index) . chr($ord-1);
}
if ($index > 0) {
// Strip the final 2 characters and append a Z
return substr($str, 0, $index-1) . 'Z';
}
// Can't be decremented
return false;
}
Большое спасибо!
BBX до YYX.
Кто-то написал функцию для этого здесь.
function decrementLetter($char) {
$len = strlen($char);
// last character is A or a
if (ord($char[$len - 1]) === 65 || ord($char[$len - 1]) === 97){
if ($len === 1){ // one character left
return null;
}
else{ // 'ABA'--; => 'AAZ'; recursive call
$char = decrementLetter(substr($char, 0, -1)).'Z';
}
}
else{
$char[$len - 1] = chr(ord($char[$len - 1]) - 1);
}
return $char;
}
Да, есть, но это не будет простым заявлением, вам нужно будет провести некоторое тестирование, чтобы убедиться, что вы не снижаете уровень ниже
Aи многое другое.