PHP 2字符递减(AB - > AA)[重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

我正在使用PHPExcel实现一些导出功能。由于PHP可以自动增加字母表,它一直工作正常但我在尝试减少它时遇到问题。我可以减少像这个$decremented = chr(ord($someChar) - 1);这样的单个字符,但它不适用于2个字符(例如'AA','BB',...等)

有什么方法可以减少两个角色吗?比如'ZZ' - >'ZX','AA' - >'Z'

任何帮助或想法将非常感谢!

php phpexcel
2个回答
2
投票

这是一个适合你的减量函数:

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;
}

https://3v4l.org/WaaKY


1
投票

有人为这个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;
}
© www.soinside.com 2019 - 2024. All rights reserved.