[Tutorial PHP] Seguimos sin repetir Codigo (Bucles For y Foreach)

Para continuar con el tema de los bucles, (de los cuales ya vimos en el articulo anterior el While y el do..while), vamos a ver los bucles for, y foreach.

El bucle for*puede parecer* a primera vista mas complejo que el while debido a su sintaxis, pero en realidad es muy sencillo a la par que potente. Normalmente decidimos usarlo cuando sabemos el numero de repeticiones que ha de realizar el bucle, por ejemplo en el articulo anterior queríamos imprimir en pantalla 500 veces una cadena de texto, sabiendo esto podemos realizar el mismo ejemplo pero usando esta vez un for:

Como se puede ver en el ejemplo, al for se le pasan 3 expresiones:

  • La primera expresión se ejecuta antes de que el bucle se inicie, en ella definimos una variable que sirva de contador con su valor, en este caso usamos $repetir = 0.
  • La segunda expresión es para crear un condicional, de forma que el bucle se repita siempre que su resultado se cumpla (TRUE), en este caso usamos $repetir <= 500.
  • La tercera expresión se ejecuta al terminar cada repetición, y la usamos para modificar el contador, ya sea incrementándolo, disminuyéndolo o cualquier operación, en este caso usamos $repetir++.

La apariencia compacta de este bucle, su potencia y flexibilidad lo hacen uno de los bucles mas usados en muchos lenguajes, incluso podemos eliminar las 3 expresiones para crear un bucle infinito, eso si respetando los puntos y comas, tal que así:

Y ahora es cuando tu te preguntas, “Esto que has hecho no tiene sentido, ¿Como sales del bucle?”, y tienes toda la razón, no tiene mucho sentido hacer un bucle con estas características, pero si que hay una forma de manipular su flujo. Con las sentencias break y continue.

Break y Continue.

La sentencia break nos sirve para romper el flujo natural de un bucle y salir de el, y la sentencia continue nos permite saltarnos la repetición que esta teniendo lugar y pasar directamente a la siguiente. Son dos sentencia que no suelo usar, ya que me parecen que hacen el código un poco mas confuso, pero voy a poner un código de ejemplo para que se vea su funcionamiento.

Quiero que el bucle se salte directamente las repeticiones 3 y 5, pero que salga de el al llegar a la 8.

3)||($i 5)){ //Saltamos las repeticiones 3 y 5 continue; }else if($i 8){ //Salimos del bucle en la repetición 8 break; } echo “Esta repetición es la numero “ . $i; } ?>

Al ejecutarlo podremos comprobar que se salta las iteraciones indicadas y sale al llegar a la octava.

El Bucle Foreach.

La forma mas sencilla que tenemos en PHP de recorrer los elementos de un array es con el bucle foreach, nos permite acceder al valor de cada elemento, o al valor y clave de estos.

Vamos a ver un ejemplo bastante sencillo de esto:

El ejemplo anterior es muy simple, tenemos un Array Indexado con 7 valores que es la variable $lenguajes, y entre los paréntesis de foreach tenemos la siguiente expresión “$lenguajes as $nombre”, esta expresión lo que viene a indicar es que dentro del bucle accederemos a los valores de* $lenguajes* mediante la variable $nombre (Tu puedes usar el nombre de variables prefieras).

El bucle recorrerá todos los valores del array, de forma que al hacer echo $nombre; imprimirá el lenguaje situado en la posición por la que el bucle se encuentra.

Pero foreach no solo sirve para leer los datos de un array si no que también nos permite alterarlos, aunque no directamente, por ejemplo:

“PHP”){ $nombre = “Cambio”; //Cambiamos “PHP” por “Cambio”; } } print_r($lenguajes); ?>

El ejemplo anterior NO funcionara como queremos. Esto se debe a que foreach no va a alterar el array original porque trabaja con una copia local, para poder alterarlo debemos de hacer que la variable del bucle apunte a la original, esto lo podemos hacer trabajando con referencias. Para indicarle que queremos trabajar con referencias tan solo debemos de añadir el simbolo & antes de $nombre.

De esta forma si modificaremos el array original.

Todo esto esta muy bien con Arrays Indexados, pero si queremos trabajar con Arrays Asociativos nos interesa tener acceso a la clave y a su valor. Solamente debemos de añadir => al bucle para lograr esto:

“Rasmus Lerdorf”, “Python” => “Guio van Rossum”, “Javascript” => “Brendan Eich”); foreach($lenguajes as $nombre => $autor){ echo “Soy “ . $nombre . “ y me creó “ . $autor; } ?>

Como ves la sentencia ($lenguajes as $nombre => $autor) nos permite acceder a la clave y a su valor asociado sin ningún problema.

Y para terminar (me ha salido mas extenso de lo que esperaba), solamente decir que los bucles se pueden anidar unos dentro de otros al igual que anidamos otros controladores de flujo, esto puede ser muy útil dependiendo de la situación, pero una muy común sera la de anidar foreach para recorrer Arrays Multidimensionales.

En el siguiente articulo entraremos de lleno en como crear funciones en php.