PHP 2 个字符递减 (AB -> AA)
PHP 2 chars decrement (AB -> AA)
我正在使用 PHPExcel 实现一些导出功能。
由于 PHP 可以自动增加字母表,所以它一直工作正常,但我在尝试减少它时遇到了问题。
我可以像这样递减单个字符 $decremented = chr(ord($someChar) - 1);
,但它不适用于 2 个字符(例如 'AA'、'BB'、.. 等)
有什么方法可以减少两个字符?喜欢 'ZZ' -> 'ZX', 'AA'->'Z'
任何帮助或想法将不胜感激!
这是一个适用于您的递减函数:
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;
}
有人为此写了一个函数 here。
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;
}
我正在使用 PHPExcel 实现一些导出功能。
由于 PHP 可以自动增加字母表,所以它一直工作正常,但我在尝试减少它时遇到了问题。
我可以像这样递减单个字符 $decremented = chr(ord($someChar) - 1);
,但它不适用于 2 个字符(例如 'AA'、'BB'、.. 等)
有什么方法可以减少两个字符?喜欢 'ZZ' -> 'ZX', 'AA'->'Z'
任何帮助或想法将不胜感激!
这是一个适用于您的递减函数:
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;
}
有人为此写了一个函数 here。
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;
}