¿Qué son los bucles, para qué sirven?
Resumen.
Este artículo lo vamos a dedicar a una de esas partes de la programación que a casi todo el mundo se le atraganta, los bucles. Los bucles son una forma de realizar una misma acción un determinado número de veces, y con ello aplicamos, por ejemplo, una función nativa a un array, actuando sobre cada uno de los elementos del array uno a uno. Hay diferentes tipos de bucles, cada uno adecuado para casos específicos, aquí veremos los que probablemente son los dos mas usados.Artículo.
Como ya dijimos en el capitulo dedicado a los array, los bucles nos permiten realizar acciones sobre las variables tipo array. Veamos que queremos decir con esto.
Cuando tenemos una variable simple como:
Con la función strlen() contamos fácilmente el número de caracteres contenidos en esa variable. Cualquiera pensaría en aplicar la función de la misma manera a la variable array, pero no funcionaria. Vamos a ver un ejemplo.
La particularidad que tienen los array es que para poder realizar acciones sobre ellos es preciso acceder a cada uno de los elementos y realizar de manera individual la acción sobre cada uno de ellos. Si tenemos un array pequeño como este, es secillo realizar la acción de manera individual sobre cada uno de los valores, pero si el array contuviera 70.000 elementos, la cosa seria un poco mas complicada.
Pues bien, para hacer cosas como esta están los bucles, y lo que hacen es repetir una acción tantas veces como sea necesario. Veamos un ejemplo.
El bucle FOR que acabamos de usar denomina cada key del array con la variable $k, que inicialmente toma el valor 0, dado que ese es el primer elemento del array y mediante $k++ incrementa el valor en 1 en cada iteración (es decir, repetición de acción). Contamos los elementos del array con la función count() y se detendrá cuando el valor sea igual al número de elementos. Sin embargo se indica menor, esto es por que al haber 5 elementos en el array, la clave mayor es 4, dado que la primera es 0.
Como ya vimos en el capitulo dedicado a los arrays, se toma cada valor del array indicando su key entre corchetes [] y el valor de la key esta almacenado en la variable $k, de ahí $mis_amigos[$k]. Una sencilla lógica, que muchas veces cuesta comprender.
Pero sobre los bucles podemos decir mas cosas, hay bucles más o menos adecuados según el caso. En este caso hemos usado un bucle poco adecuado. Y el bucle FOR es inadecuado para este caso, aunque su acción la realiza perfectamente, por que a este hay que marcarle el inicio y el fin de la iteración (repetición de acción).
Pero hay otro bucle que es mas adecuado para este caso, es el bucle foreach, que tiene la particularidad de que no es preciso marcarle cuando comienza y termina si lo que tenemos que hacer es recorrer un array en su totalidad. Veamos el nuevo bucle.
Como podemos ver, el bucle foreach no precisa que se le marque el inicio y el fin del recorrido del array, sencillamente lo recorre de principio a fin, por lo demás, la lógica es exactamente la misma que la del bucle for. Es preferible usar este bucle siempre que sea posible, su sintaxis es más sencilla y su consumo de recursos de servidor también es menor.
Para cerrar este capitulo, mediante la función array_combine() hemos creado un nuevo array que contiene como keys los nombres y como valor el número de caracteres de cada nombre. Es una forma de resumir información de dos array en uno.
Cuando tenemos una variable simple como:
<?php
$mi_variable = 'Aprendiendo sobre los bucles en PHP. ';
/* Aplicamos una función nativa para contar el número de caracteres contenidos en la variable */
$n_carac = strlen($mi_variable);
echo "En <b>$mi_variable</b> hay $n_carac caracteres. ";
?>
Con la función strlen() contamos fácilmente el número de caracteres contenidos en esa variable. Cualquiera pensaría en aplicar la función de la misma manera a la variable array, pero no funcionaria. Vamos a ver un ejemplo.
<?php
$mis_amigos = array('Emma', 'Marcos', 'Venus', 'Raquel', 'Juan');
/* Aplicamos una función nativa para contar el número de caracteres contenidos en la variable */
$n_carac = strlen($mis_amigos);
echo "En <b>$mis_amigos </b> hay $n_carac caracteres. ";
// Y esto NO FUNCIONA
?>
La particularidad que tienen los array es que para poder realizar acciones sobre ellos es preciso acceder a cada uno de los elementos y realizar de manera individual la acción sobre cada uno de ellos. Si tenemos un array pequeño como este, es secillo realizar la acción de manera individual sobre cada uno de los valores, pero si el array contuviera 70.000 elementos, la cosa seria un poco mas complicada.
Pues bien, para hacer cosas como esta están los bucles, y lo que hacen es repetir una acción tantas veces como sea necesario. Veamos un ejemplo.
<?php
$mis_amigos = array('Emma', 'Marcos', 'Venus', 'Raquel', 'Juan');
/* Aplicamos la función nativa strlen() a un array mediante el bucle FOR */
for($k = 0; $k < count($mis_amigos); ++$k){
// Aplica la funcion al array
$arrayAmigos = strlen($mis_amigos[$k]);
// Creamos el nuevo array
$array_caracteres[$k] = $arrayAmigos;
}
echo '<pre>';
print_r($mis_amigos);
echo '</pre>';
echo '<pre>';
print_r($array_caracteres);
echo '</pre>';
?>
El bucle FOR que acabamos de usar denomina cada key del array con la variable $k, que inicialmente toma el valor 0, dado que ese es el primer elemento del array y mediante $k++ incrementa el valor en 1 en cada iteración (es decir, repetición de acción). Contamos los elementos del array con la función count() y se detendrá cuando el valor sea igual al número de elementos. Sin embargo se indica menor, esto es por que al haber 5 elementos en el array, la clave mayor es 4, dado que la primera es 0.
Como ya vimos en el capitulo dedicado a los arrays, se toma cada valor del array indicando su key entre corchetes [] y el valor de la key esta almacenado en la variable $k, de ahí $mis_amigos[$k]. Una sencilla lógica, que muchas veces cuesta comprender.
Pero sobre los bucles podemos decir mas cosas, hay bucles más o menos adecuados según el caso. En este caso hemos usado un bucle poco adecuado. Y el bucle FOR es inadecuado para este caso, aunque su acción la realiza perfectamente, por que a este hay que marcarle el inicio y el fin de la iteración (repetición de acción).
Pero hay otro bucle que es mas adecuado para este caso, es el bucle foreach, que tiene la particularidad de que no es preciso marcarle cuando comienza y termina si lo que tenemos que hacer es recorrer un array en su totalidad. Veamos el nuevo bucle.
<?php
$mis_amigos = array('Emma', 'Marcos', 'Venus', 'Raquel', 'Juan');
/* Aplicamos la función nativa strlen() a un array mediante el bucle FOREACH */
foreach($mis_amigos as $key => $amigos){
// Aplicamos la función strlen() al array
$array_caracteres[$key] = strlen($amigos);
}
echo '<pre>';
print_r($mis_amigos);
echo '</pre>';
echo '<pre>';
print_r($array_caracteres);
echo '</pre>';
/* Ahora podemos también crear un array con los nombres y el y su número de caracteres */
$array_amigos_caracteres = array_combine($mis_amigos, $array_caracteres);
echo '<pre>';
print_r($array_amigos_caracteres);
echo '</pre>';
?>
Como podemos ver, el bucle foreach no precisa que se le marque el inicio y el fin del recorrido del array, sencillamente lo recorre de principio a fin, por lo demás, la lógica es exactamente la misma que la del bucle for. Es preferible usar este bucle siempre que sea posible, su sintaxis es más sencilla y su consumo de recursos de servidor también es menor.
Para cerrar este capitulo, mediante la función array_combine() hemos creado un nuevo array que contiene como keys los nombres y como valor el número de caracteres de cada nombre. Es una forma de resumir información de dos array en uno.
Tags: bucles || array || for || foreach || array_combine