Étant donné n'importe quel caractère de a à z, quelle est la façon la plus efficace d'obtenir la prochaine lettre de l'alphabet en utilisant PHP?
La façon la plus efficace de le faire dans mon opinion est de juste incrémenter la variable chaîne.
$str = 'a';
echo ++$str; // prints 'b'
$str = 'z';
echo ++$str; // prints 'aa'
Comme vu en incrémentant 'z'
donner 'aa'
si vous ne le souhaitez pas mais que vous souhaitez réinitialiser pour obtenir un 'a'
vous pouvez simplement vérifier la longueur de la chaîne résultante et si son >1
le réinitialiser.
$ch = 'a';
$next_ch = ++$ch;
if (strlen($next_ch) > 1) { // if you go beyond z or Z reset to a or A
$next_ch = $next_ch[0];
}
Cela dépend de ce que vous voulez faire lorsque vous appuyez sur Z, mais vous avez quelques options:
$nextChar = chr(ord($currChar) + 1); // "a" -> "b", "z" -> "{"
Vous pouvez également utiliser la fonction range()
de PHP:
$chars = range('a', 'z'); // ['a', 'b', 'c', 'd', ...]
Eh bien, cela dépend de ce que vous voulez exactement faire avec les "cas Edge". Quel résultat attendez-vous lorsque le caractère est z
ou Z
? Voulez-vous la prochaine lettre du même cas, ou juste la prochaine lettre, point?
Sans connaître la réponse à cela, pour le cas très basique, vous pouvez simplement faire ceci:
$next_character = chr(ord($current_character) + 1);
Mais lorsque vous êtes à Z
cela vous donnera [
et z
vous donneront {
, selon ASCII valeurs.
Modifié selon le commentaire:
Si vous avez besoin du caractère suivant du même cas, vous pouvez probablement simplement ajouter des vérifications simples après la ligne ci-dessus:
if ($next_character == '[')
$next_character = 'A';
else if ($next_character == '{')
$next_character = 'a';
Ce sont des opérations très simples, je ne me soucierais vraiment pas de l'efficacité dans un cas comme celui-ci.
Que diriez-vous d'utiliser ord () et chr () ?
<?php
$next = chr(ord($prev)+1);
?>
Comme je ne me soucie que des caractères en minuscules dans ce cas, j'utiliserai le code suivant, basé sur les réponses publiées ici:
function nextLetter(&$str) {
$str = ('z' === $str ? 'a' : ++$str);
}
Merci pour l'aide les gars!
$val = 'z';
echo chr((((ord($val) - 97) + 1) % 26) + 97);
Agréable et facile :-)
Créez un tableau de toutes les lettres, recherchez la lettre existante et renvoyez sa prochaine lettre. Si vous atteignez la dernière lettre, retournez la première lettre.