Bucle foreach para cada número o letra de un rango PHP
Rango? foreach? Mmmmm …. Lo primero que se viene a la cabeza es construir un array con todos los valores del rango y pasar este array por el bucle foreach
. Por ejemplo, para hacer un foreach
para todos los números entre el 1 y 9, ambos incluidos:
$numeros = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
echo "<ul">;
foreach($numeros as $numero) {
echo "<li>Número: ". $numero . "</li>;
}
echo "</ul>
El ejemplo anterior es totalmente válido, sólo tiene un «pero». Imagina que queremos hacer el foreach
para todos los números entre el 0 y 100.000. ¿Vas a construir el array con todo esos números de forma manual? Ni loco. Si piensas en utilizar un bucle for
para construir el array o hacer directamente el bucle, puedes, te saldrá bien:
echo "<ul">;
for($numero = 1, $numero <= 100000, $numero += 1 ) {
echo "<li>Número: ". $numero . "</li>;
}
echo "</ul>
Y existe otra posibilidad, utilizar la función range(). Esta función nativa de PHP permite crear un array que contenga todos los valores comprendidos en un determinado rango y con el incremento que deseemos entre cada valor. Tiene la siguiente sintaxis:
array range ( mixed $comienzo , mixed $final [, number $incremento = 1 ] )
Por ejemplo:
- Rango del 0 al 100 con incrementos de 1 (el incremento de 1 puede omitirse):
range(0, 100)
- Rango del 0 al 100 con incrementos de 3:
range(0, 100, 3)
Así, podríamos hacer un bucle foreach
para todos los números entre 0 y 100.000 con incrementos de 1:
echo "<ul">;
foreach( range(0, 100000) as $numero ) {
echo "<li>Número: ". $numero . "</li>;
}
echo "</ul>
range()
también se puede utilizar con letras. Por ejemplo:
echo "<ul">;
//array("a", "b", "c", "d", "e", "f")
foreach( range("a", "f") as $letra ) {
echo "<li>Letra: ". $letra . "</li>;
}
echo "</ul>
Para hacer lo mismo con un bucle for
habría que echar mano de chr() y controlar el valor decimal de la tabla ASCII correspondientes al rango de letras que deseemos. Por ejemplo, el rango a – f corresponde en la tabla ASCII a 97 – 102:
echo "<ul">;
for( $char = 97, $char <= 102, $char += 1 ) {
echo "<li>Letra: ". chr($char) . "</li>;
}
echo "</ul>
¿Alguna sugerencia más para bucles sobre un rango de datos?