Уменьшение PHP на 2 символа (AB -> AA)

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

Есть ли способ уменьшить два символа? Как 'ZZ' -> 'ZX', 'AA' -> 'Z'

Любая помощь или мысли будут очень признательны!

Да, есть, но это не будет простым заявлением, вам нужно будет провести некоторое тестирование, чтобы убедиться, что вы не снижаете уровень ниже A и многое другое.

RiggsFolly 31.08.2018 23:15

Но наверняка вы должны были сделать что-то похожее при увеличении, чтобы при увеличении Z вы получали AA

RiggsFolly 31.08.2018 23:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
188
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

Большое спасибо!

Min Lee 31.08.2018 23:43
stackoverflow.com/questions/10762579/… на самом деле лучше. Мой неправильно обрабатывает значения от BBX до YYX.
Devon 31.08.2018 23:48

Кто-то написал функцию для этого здесь.

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

Другие вопросы по теме