67 votes

Le moyen le plus efficace pour obtenir la prochaine lettre de l'alphabet en utilisant PHP

Quel que soit le caractère compris entre a et z, quel est le moyen le plus efficace d’obtenir la prochaine lettre de l’alphabet en utilisant PHP?

119voto

codaddict Points 154968

A mon avis, le moyen le plus efficace consiste à incrémenter la variable chaîne.

 $str = 'a';
echo ++$str; // prints 'b'

$str = 'z';
echo ++$str; // prints 'aa' 
 

Comme vu incrémenter 'z' donner 'aa' si vous ne le souhaitez pas mais souhaitez plutôt réinitialiser pour obtenir un 'a' vous pouvez simplement vérifier la longueur de la chaîne résultante et si son >1 réinitialise.

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

16voto

nickf Points 185423

Cela dépend de ce que vous voulez faire quand vous frappez 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', ...]
 

8voto

Chad Birch Points 39087

Et bien, cela dépend exactement ce que vous voulez faire avec les "cas limites". Quels résultats attendez-vous quand le personnage est - z ou Z? Voulez-vous la lettre suivante dans le même cas, ou tout simplement la lettre suivante, période?

Sans connaître la réponse à cette question, pour la base de cas, il vous suffit de faire ceci:

$next_character = chr(ord($current_character) + 1);

Mais quand vous êtes à l' Z cela vous donnera [, et z vous donnera {, selon les valeurs ASCII.


Édité par commentaire:

Si vous avez besoin le caractère suivant de la même affaire, vous pouvez probablement ajouter de simples vérifications 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, j'ai vraiment ne vous inquiétez pas à propos de l'efficacité dans un cas comme celui-ci.

5voto

Anax Points 5163

Que diriez-vous d'utiliser ord () et chr () ?

 <?php
    $next = chr(ord($prev)+1);
?>
 

3voto

Mathias Bynens Points 41065

Dans ce cas, je ne me soucie que des minuscules, je vais utiliser 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!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X