Comment incrémenter des lettres comme des nombres en PHP?

Je voudrais écrire une fonction qui prend 3 caractères et l’incrémente et renvoie les caractères nouvellement incrémentés sous forme de chaîne.

Je sais comment augmenter une seule lettre à la suivante, mais comment pourrais-je savoir quand augmenter les deuxièmes lettres, puis arrêter puis augmenter la première lettre pour obtenir une augmentation séquentielle?

Donc, si AAA est passé, retournez AAB. Si AAZ est passé, retournez ABA (partie dure).

J’apprécierais l’aide avec la logique et quelles fonctions de php seront utiles à employer.

Mieux encore, certains ont-ils déjà fait cela ou existe-t-il une classe disponible pour le faire?

Merci à tous pour toute aide

L’incrément de caractère / chaîne fonctionne en PHP (même si la décrémentation ne fonctionne pas)

$x = 'AAZ'; $x++; echo $x; 

Vous pouvez le faire avec l’opérateur ++.

 $i = 'aaz'; $i++; print $i; 

aba

Cependant, cette implémentation comporte des choses étranges:

 for($i = 'a'; $i < 'z'; $i++) print "$i "; 

Cela imprimera les lettres de a à y .

 for($i = 'a'; $i <= 'z'; $i++) print "$i "; 

Cela va imprimer les lettes de a à z et continue avec aa et se termine par yz .

Vous examinez un problème de représentation numérique. Ceci est base24 (ou peu importe le nombre que votre alphabet a). Appelons la base b.

Atsortingbuez un numéro à chaque lettre de l’alphabet (A = 1, B = 2, C = 3).

Ensuite, déterminez votre “numéro” de saisie: La représentation “ABC” signifie A*b^2 + B*b^1 + C*b^0 Utilisez cette formule pour trouver le nombre (int). Incrémentez-le.

Ensuite, reconvertissez-le en système de numérotation: Divisez par b^2 pour obtenir le troisième chiffre, le rest (modulo) par b^1 pour le deuxième chiffre, le rest (modulo) par `b ^ 0 ^ pour le dernier chiffre.

Cela pourrait aider: Comment convertir de base10 à une autre base .

J’ai ces méthodes dans c # que vous pourriez probablement convertir en php et modifier pour répondre à vos besoins, je ne suis pas sûr que Hexavigesimal soit le nom exact de ces si …

 #region Hexavigesimal (Excel Column Name to Number) public static int FromHexavigesimal(this ssortingng s) { int i = 0; s = s.Reverse(); for (int p = s.Length - 1; p >= 0; p--) { char c = s[p]; i += c.toInt() * (int)Math.Pow(26, p); } return i; } public static ssortingng ToHexavigesimal(this int i) { SsortingngBuilder s = new SsortingngBuilder(); while (i > 26) { int r = i % 26; if (r == 0) { i -= 26; s.Insert(0, 'Z'); } else { s.Insert(0, r.toChar()); } i = i / 26; } return s.Insert(0, i.toChar()).ToSsortingng(); } public static ssortingng Increment(this ssortingng s, int offset) { return (s.FromHexavigesimal() + offset).ToHexavigesimal(); } private static char toChar(this int i) { return (char)(i + 64); } private static int toInt(this char c) { return (int)c - 64; } #endregion 

MODIFIER

Je vois par les autres réponses qu’en PHP, vous pouvez utiliser ++ place, sympa!

Vous pouvez utiliser les codes ASCII pour les chiffres alpha. De là, vous incrémentez et décrémentez pour obtenir le caractère précédent / suivant.

Vous pouvez diviser votre chaîne en caractères simples, puis appliquer les transformations sur ces caractères.

Juste quelques reflections pour vous lancer.

   

La manière correcte n’utilise pas ++ mais utilise ord() a chr()

 $letter = 'A'; $letterAscii = ord($letter); $letterAscii++; $letter = chr($letterAscii); // 'B' 

Vous ne devriez pas incrémenter des chaînes, donc

  1. ord() convertit la lettre en représentation ASCII num
  2. cette représentation numérique est incrémentée
  3. using chr() reconverti à la lettre