Boletin 2 de ejercicios sobre bucles PHP

Aprende a utilizar los bucles en PHP con estos ejercicios de nivel principiante. Con estos ejercicios podrás practicar para más tarde ver la solución

Bucles

Ejercicio 1

Enunciado del ejercicio 1

El páginado de contenidos con bucles

En este ejercicio vamos a resolver un problema común en la web como los enlaces a las páginas de un contenido. mediante el uso de bucles php. Tenemos pues que imprimir enlaces html (con la etiqueta de enlaces <A>) relativos a las páginas que haya disponibles. El número de páginas total lo tendremos disponible en la variable $paginas. Se pide entonces:

  • Mostrar el número de páginas, desde 1 hasta el número indicado en $paginas.
  • Cada número debe ir en una etiqueta html <A> como el siguiente ejemplo: <A href="#" > 1 </A>

Recuerda que una vez hayas intentado resolver el ejercicio puedes consultar las soluciones propuestas y la explicación en los botones de abajo: SOLUCION del ejercicio 1 y EXPLICACION del ejercicio 1

//SOLUCION 1: CON WHILE
<?php
$i = 1;
while ( $i <= $paginas ) {
   echo '<A href="#" >' . $i . '</A>';
   $i++;
}
 
//SOLUCION 2: CON FOR
for( $i = 1; $i <= $paginas; $i++ ) {
   echo '<A href="#" >' . $i . '</A>';
}
?>
 
//SOLUCION 3: CERRANDO Y ABRIENDO PHP
//Aclaración: esta solución es válida con cualquier bucle php
for( $i = 1; $i <= $paginas; $i++ ) {
   ?>
   <A href="#" > <?php echo $i ?> </A>
   ?>
}
?>

Para empezar a resolver este ejercicio hay que darse cuenta de que es imposible realizarlo sin la funcionalidad de un bucle php ¿Por qué? Pues porque realizar un número indeterminado de repeticiones, es decir, adaptarme al número indicado en la variable $paginas es imposible sin un bucle (sobretodo si eres principiante) y su condición de ejecución. 

Una vez tenemos claro que bucle vamos a utilizar para resolver el problema (cualquiera de los tres comunes es válido), lo primero que nos debe venir a la cabeza es una pregunta: ¿cuantas iteraciones tendrá mi bucle?. Pues exactamente $pagina iteraciones, ya que nos han dicho que empezaremos con la página 1. De aquí sacaremos tres cosas: la condición del bucle, el inicio del contador y la velocidad a la que incrementaré el contador.

Veamos entonces que bucle vamos a crear:

for( $i = 1; $i <= $paginas; $i++ ) 

Un bucle for que crea la variable $i, para ayudarme a contar, con la condición de repetición "mientras $i sea menor o igual a la variable $paginas" y en cada iteración incrementaré el contador en 1 con $i++.

Ahora voy a imprimir en cada repetición del bucle un enlace HTML:

echo '<A href="#" >' . $i . '</A>';

Abrir y cerrar php para imprimir HTML

Como habrás podido observar en la Solución 3 he impreso el HTML sin utilizar echo esto es una de las características de PHP más utilizadas a la hora de realizar webs. En cualquier punto de nuestro código podemos cerrar PHP para escribir un lenguaje como puede ser HTML o JAVASCRIPT y volver a abrirlo con <?php para continuar con el script de forma normal. Podríamos decir que al hacer esto estamos realizando una especie de echo.

Si quieres puedes leer el siguiente enlace:como combinar PHP y HTML de distintas formas

 

Ejercicio 2

Enunciado del ejercicio 2

Realizar el ejercicio #1 pero mejorando el resultado mostrado por pantalla:

  1. Debes indicar en el href la página adecuada como por ejemplo: <A href="?pag=NUM-PAGINA-PHP" > 1 </A> sustituyendo NUM-PAGINA-PHP por el número de la página que toque.
  2. Además debes añadir un enlace a la primera página y otro a la última, siempre y cuando $paginas sea mayor que 1.

Solución 1: usando bucle While

<?php
if( $paginas > 1 ){
    echo '<A href="?pag=1" >Primera</A>';
}
$i = 1;
while ( $i <= $paginas ) {
   echo '<A href="?pag=' . $i . '" >' . $i . '</A>';
   $i++;
}
if( $paginas > 1 ){
    echo '<A href="?pag=' . $paginas . '" >Última</A>';
}

Solución 1: usando bucle FOR

if( $paginas > 1 ){
    echo '<A href="?pag=1" >Primera</A>';
}
for( $i = 1; $i <= $paginas; $i++ ) {
   echo '<A href="?pag=' . $i . '" >' . $i . '</A>';
}
if( $paginas > 1 ){
    echo '<A href="?pag=' . $paginas . '" >Última</A>';
}
?>

Solución 3: Combinando html cerrando y abriendo PHP

//Aclaración: esta solución es válida con cualquier bucle php
if( $paginas > 1 ){ 
   ?>
   <A href="?pag=1" > Primera </A>
   ?>
}
for( $i = 1; $i <= $paginas; $i++ ) {
   ?>
   <A href="?pag=<?php echo $i; ?>" > <?php echo $i ?> </A>
   ?>
}
?>
if( $paginas > 1 ){ 
   ?>
   <A href="?pag=<?php echo $paginas ?>" > Ultima </A>
   ?>
}

Vamos a ver como solucionar los dos cambios que pedía este ejercicio respecto al primero:

  1. Para mejorar los enlaces nos pedían que deberíamos de cambiar el atributo HREF de la etiqueta A, en concreto, añadir el número de página al enlace de forma que funcionen los links cuando el usuario pinche el enlace. Resolver este problema es tan sencillo como concatener con php en el interior de este atributo la variable contador del bucle, $i.

    Como puedes ver en las tres soluciones he contatenado la variable $i en el enlace href="?pag=". En la tercera solución, siguiendo con la estrategia de abrir y cerrar php cuando quiero escribir directamente HTML realizo un echo en el lugar donde quiero que aparezca el valor del contador:  <A href="?pag=<?php echo $i; ?>" >

  2.  El segundo requisito de este problema era incluir un enlace a la primera y última página siempre y cuando hubiera más de 1 página. En el este caso debemos pensar que la primera página deberá ir ANTES de imprimir todas las páginas y el enlace a la última deberá ir DESPUES de imprimir todas las páginas. Así imprimir la primera página será poner el valor 1 y la última utilizar el valor de la variable $paginas.

    echo '<A href="?pag=1" >Primera</A>';
    echo '<A href="?pag=' . $paginas . '" >Última</A>';

    Habríamos terminado si no fuera por que nos dicen que solo se deberán mostrar estos enlaces si hay más de una página. Dos IF serán suficiente para terminar:

    if( $paginas > 1 ){

Ejercicio 3

Enunciado del ejercicio 3

Rango de valores

Tenemos un problema, queremos motrar una serie de números comprendidos entre dos límites. El límite inferior (el primer número) lo tenemos disponible ne la variable $min. El límite superior en la variable $max. 

Debemos por lo tanto mostrar todos los números compredidos entre $min y $max (ambos incluidos).

Solución utilizando while

<?php
 $while ( $min <= $max ) {
echo $min;
$min++;
?>

Solución con bucle for

<?php
for( $i = $min; $i <= $max; $i++ ){
echo $i;
?>
 

Para solucionar este ejercicio debemos recorrer los números, que son consecutivos, desde $min a $max, con un bucle, ya que no hay otra forma de resolverlo. Así, el contador será igual a $min, o podré utilizar esta misma variable como contador.

Como los números van de 1 en 1 el incremento del contador lo realizaré añadiendo 1 en cada iteración.

Por último les importante fijarse en la condición, ya que si utilizo el símbolo de menor que en vez de menor o igual no mostraría el último número del rango que nos piden.

Sobre el autor

Javier Gómez Redactor en Srcodigofuente.es

Javier Gómez

Ingeniero técnico en informática de gestión. Desarrollador web freelance y profesor de desarrollo web a partes iguales. Testarudo autodidacta, creativo, perfeccionista y alma libre.

Utilizamos "cookies" para información estadística. Si continúas navegando aceptas su uso.