array abecedario php
La manera más eficiente de obtener la siguiente letra en el alfabeto usando PHP (7)
¿Qué hay de usar ord () y chr () ?
<?php
$next = chr(ord($prev)+1);
?>
Dado cualquier carácter de la aa la z, ¿cuál es la forma más eficiente de obtener la siguiente letra del alfabeto con PHP?
Bueno, depende exactamente qué quieres hacer con los "casos límite". ¿Qué resultado esperas cuando el personaje es z
o Z
? ¿Desea la próxima letra del mismo caso , o solo la próxima letra, punto?
Sin saber la respuesta a eso, para el caso muy básico, puedes hacer esto:
$next_character = chr(ord($current_character) + 1);
Pero cuando estás en Z
esto te dará [
, z
te dará {
, de acuerdo con los valores ASCII.
Editado según el comentario:
Si necesita el siguiente personaje del mismo caso, probablemente solo pueda agregar comprobaciones simples después de la línea anterior:
if ($next_character == ''['')
$next_character = ''A'';
else if ($next_character == ''{'')
$next_character = ''a'';
Estas son operaciones muy simples, realmente no me preocuparía la eficiencia en un caso como este.
Como en este caso solo me interesan los caracteres en minúscula, usaré el siguiente código, en función de las respuestas publicadas aquí:
function nextLetter(&$str) {
$str = (''z'' === $str ? ''a'' : ++$str);
}
¡Gracias por la ayuda chicos!
Cree una matriz de todas las letras, busque la letra existente y devuelva su siguiente letra. Si llega a la última letra, devuelva la primera letra.
Depende de lo que quieras hacer cuando presionas Z, pero tienes algunas opciones:
$nextChar = chr(ord($currChar) + 1); // "a" -> "b", "z" -> "{"
También puede hacer uso de la función range()
de PHP:
$chars = range(''a'', ''z''); // [''a'', ''b'', ''c'', ''d'', ...]
La forma más eficiente de hacer esto en mi opinión es simplemente incrementar la variable de cadena.
$str = ''a'';
echo ++$str; // prints ''b''
$str = ''z'';
echo ++$str; // prints ''aa''
Como se ve incrementando ''z''
da ''aa''
si no quieres esto, pero en cambio quieres restablecer para obtener una ''a''
, simplemente puedes verificar la longitud de la cadena resultante y si es >1
reiníciala.
$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];
}
$val = ''z'';
echo chr((((ord($val) - 97) + 1) % 26) + 97);
Bonito y fácil :-)