Instrucciones de control
Proporcionan las herramientas más importantes para que nuestras páginas sean dinámicas. Permiten evaluar el contenido de las variables y tomar las decisiones pertinentes.Instrucciones condicionales:
if
La forma más simple es:
if (condicion)
acción;
Si hubiera varias acciones a realizar, deberemos incluir todas las instrucciones entre llaves { }
if (condicion)
{
accion 1;
accion2;
...;
}
if ... else
if(condicion){
... instrucciones...
... a ejecutar cuando
se cumple la condición
} else {
... instrucciones...
... a ejecutar cuando NO
se cumple la condición
}
En ocasiones esta otra sintaxis es muy útil:
(condición) ? (acción1) : (condición 2);
Si se cumple la condición se ejecuta la acción 1. Si no se cumple, se ejecuta la acción 2.
if ... elseif
if(condicion1){
... instrucciones...
... a ejecutar cuando
se cumple la condición1
}
elseif(condicion2){
... instrucciones...
... a ejecutar cuando
se cumple la condición2
sin cumplirse condición1
} else {
... instrucciones...
... a ejecutar cuando NO
se cumple ni la condición1
ni la condicion2
}
Veamos un ejemplo concreto:
$hora = date('H');
if ($hora == '9')
{
echo 'Bienvenido al curro.';
}
elseif ($hora == '14')
{
echo '¡Que aproveche!';
}
elseif ($hora == '16')
{
echo '¡Lástima de siesta';
}
elseif ($hora == '19') echo 'Hasta mañana';
}
Este código se vería así en caso de ser una de las horas marcadas en la condición:
Hasta mañana.
En este otro ejemplo aplicaríamos un descuento u otro dependiendo de la cantidad de productos comprados:
if (productos == 0)
echo 'No hay ningún producto en su cesta de la compra.';
elseif (productos < 10)
$descuento = 0;
elseif ($productos >= 10 && $productos < 49)
$descuento = 10;
elseif ($productos > 50)
$descuento = 15;
Instrucciones switch
La función switch evalúa una variable y según su valor, ejecuta unas instrucciones u otras.
$hora = date('H');
switch ($hora)
{
case '9': echo 'Bienvenido al curro.';
break;
case '14': echo '¡Que aproveche!';
break;
case '16': echo '¡Lástima de siesta';
break;
case '19': echo 'Hasta mañana';
break;
default: echo '¡A trabajar!';
}
Este código se vería así:
Hasta mañanaInstrucciones iterativas
Estas instrucciones permiten ejecutar un bloque de código tantas veces como sea necesario mientras se cumpla una determinada condición.Bucle for
Permite ejecutar un bloque de instrucciones un número concreto de veces.
for (expresion1; expresion2; expresion3)
accion
El siguiente código ejecuta el bucle tres veces:
<?php
for ($i = 1; $i <= 3; $i++)
{
echo 'Probando un bucle for que se repetirá tres veces <BR>';
}
?>
Probando el funcionamiento de un bucle for que se repetirá tres veces.
Probando el funcionamiento de un bucle for que se repetirá tres veces.
Probando el funcionamiento de un bucle for que se repetirá tres veces.
En el siguiente ejemplo podemos ver una lista de encabezados html ordenados:
<php
for ($i = 1; $i <= 6; $i ++)
{
echo '<H'.$1. '> Estos son los encabezados html ordenados del 1 al 6</H'.$i.'>';
}
?>
Bucle while
Con esta sencilla sintaxis estamos indicando que mientras se cumpla esa condición, la acción se ejecute continua y repetidamente:
while (condición)
acción
Veamos este ejemplo para escribir los números del 1 al 100 separados por un guión:
<?php
$i = 1;
while (i <= 10)
{
echo $i++, ' - ';
}
?>
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - 15 - 16 - 17 - 18 - 19 - 20 - 21 - 22 - 23 - 24 - 25 - 26 - 27 - 28 - 29 - 30 - 31 - 32 - 33 - 34 - 35 - 36 - 37 - 38 - 39 - 40 - 41 - 42 - 43 - 44 - 45 - 46 - 47 - 48 - 49 - 50 - 51 - 52 - 53 - 54 - 55 - 56 - 57 - 58 - 59 - 60 - 61 - 62 - 63 - 64 - 65 - 66 - 67 - 68 - 69 - 70 - 71 - 72 - 73 - 74 - 75 - 76 - 77 - 78 - 79 - 80 - 81 - 82 - 83 - 84 - 85 - 86 - 87 - 88 - 89 - 90 - 91 - 92 - 93 - 94 - 95 - 96 - 97 - 98 - 99 - 100 -
Supongamos que sólo queremos escribir los números pares:
<?php
$i = 0;
while(++$i) /* Incrementa $i antes de evaluar la condición (preincremento)*/
{
if $i % 2
continue; /* Saltamos los números pares */
if $i = 100
break;
echo $i, " ", " - ";
?>
Veamos el resultado del código anterior:
2 - 4 - 6 - 8 - 10 - 12 - 14 - 16 - 18 - 20 - 22 - 24 - 26 - 28 - 30 - 32 - 34 - 36 - 38 - 40 - 42 - 44 - 46 - 48 - 50 - 52 - 54 - 56 - 58 - 60 - 62 - 64 - 66 - 68 - 70 - 72 - 74 - 76 - 78 - 80 - 82 - 84 - 86 - 88 - 90 - 92 - 94 - 96 - 98 - 100 -
Bucle do ... while
Se diferencia de while porque do ... while evalúa cada condición al final de cada interacción en lugar de al inicio. Así por obligación se ejecutará al menos una acción.
<?php
$num = 100;
do
{
echo $num;
}
while ($num < 1);
?>
En este ejemplo la acción sólo se ejecuta una vez ya que la condición while no se cumple.
100
El bucle foreach
El bucle foreach es específico de los arrays y aplicable a ellos tanto si son escalares [0], [1]... como de tipo asociativo. Así se pueden recorrer todos los elementos de un array sin saber cuántos lo componen.
Tenemos dos posibles opciones. En la primera de ellas se leen solamente los valores contenidos en cada elemento del array. Su sintaxis básica es:
foreach (array as $valor)
{
instrucciones
}
En la segunda opción podremos leer el índice y el contenido del array. Su sintaxis es:
foreach (array as $clave1 => $clave2)
{
instrucciones
}
En el ejemplo de las películas vistas esto nos puede ser de utilidad:
<?php
$peliculas = array(
'enero' => 9,
'febrero' => 12,
'marzo' => 21,
'abril' => 15
);foreach ($peliculas as $mes => $vistas)
{
echo 'En ', $mes, 'he visto ', $vistas, 'películas.<BR>';
}
?>
El bucle se repetirá tantas veces como elementos tenga el array y este será el resultado:
El mes de enero he visto 9 películas.
El mes de febrero he visto 12 películas.
El mes de marzo he visto 21 películas.
El mes de abril he visto 17 películas.
Salida de bucles
Para alterar el flujo de ejecución de un bucle existen algunas instrucciones especiales:
break
Utilizamos brak para detener la ejecución de los bucles for, foreach, while y do ... while
continue
Utilizamos continue para saltarnos el resto de las líneas de código asociadas a un bucle y continuar con la siguiente interacción. Por ejemplo si queremos escribir sólo los números impares:
<?php
for ($i=0; i <= 100; $i++)
{
# Ponemos la condición de múltiplo de 2 y le decimos que ignore esos datos y continúe al valor siguiente
if (i % 2 == 0)
{
continue;
}
echo $i, ' - ';
}
?>
Este será el resultado:
1 - 3 - 5 - 7 - 9 - 11 - 13 - 15 - 17 - 19 - 21 - 23 - 25 - 27 - 29 - 31 - 33 - 35 - 37 - 39 - 41 - 43 - 45 - 47 - 49 - 51 - 53 - 55 - 57 - 59 - 61 - 63 - 65 - 67 - 69 - 71 - 73 - 75 - 77 - 79 - 81 - 83 - 85 - 87 - 89 - 91 - 93 - 95 - 97 - 99 -
Ahora buscaremos los números múltiplos de 3 hasta el 1000. Para ello pondremos a la variable i un incremento (++) y cada vez haremos que compruebe que el resto de la división es 0 o no es 0. Si no es 0 if ($i % 3 != 0) no es múltiplo de 3, por lo tanto no tendrá en cuenta ese valor y continuará con el siguiente incremento.
<?php
$i = 0;
while ($i++ < 1000)
{
if ($i % 3 != 0)
{
continue;
}
echo $i, ' - ';
}
?>
Y este será el resultado del código anterior:
3 - 6 - 9 - 12 - 15 - 18 - 21 - 24 - 27 - 30 - 33 - 36 - 39 - 42 - 45 - 48 - 51 - 54 - 57 - 60 - 63 - 66 - 69 - 72 - 75 - 78 - 81 - 84 - 87 - 90 - 93 - 96 - 99 - 102 - 105 - 108 - 111 - 114 - 117 - 120 - 123 - 126 - 129 - 132 - 135 - 138 - 141 - 144 - 147 - 150 - 153 - 156 - 159 - 162 - 165 - 168 - 171 - 174 - 177 - 180 - 183 - 186 - 189 - 192 - 195 - 198 - 201 - 204 - 207 - 210 - 213 - 216 - 219 - 222 - 225 - 228 - 231 - 234 - 237 - 240 - 243 - 246 - 249 - 252 - 255 - 258 - 261 - 264 - 267 - 270 - 273 - 276 - 279 - 282 - 285 - 288 - 291 - 294 - 297 - 300 - 303 - 306 - 309 - 312 - 315 - 318 - 321 - 324 - 327 - 330 - 333 - 336 - 339 - 342 - 345 - 348 - 351 - 354 - 357 - 360 - 363 - 366 - 369 - 372 - 375 - 378 - 381 - 384 - 387 - 390 - 393 - 396 - 399 - 402 - 405 - 408 - 411 - 414 - 417 - 420 - 423 - 426 - 429 - 432 - 435 - 438 - 441 - 444 - 447 - 450 - 453 - 456 - 459 - 462 - 465 - 468 - 471 - 474 - 477 - 480 - 483 - 486 - 489 - 492 - 495 - 498 - 501 - 504 - 507 - 510 - 513 - 516 - 519 - 522 - 525 - 528 - 531 - 534 - 537 - 540 - 543 - 546 - 549 - 552 - 555 - 558 - 561 - 564 - 567 - 570 - 573 - 576 - 579 - 582 - 585 - 588 - 591 - 594 - 597 - 600 - 603 - 606 - 609 - 612 - 615 - 618 - 621 - 624 - 627 - 630 - 633 - 636 - 639 - 642 - 645 - 648 - 651 - 654 - 657 - 660 - 663 - 666 - 669 - 672 - 675 - 678 - 681 - 684 - 687 - 690 - 693 - 696 - 699 - 702 - 705 - 708 - 711 - 714 - 717 - 720 - 723 - 726 - 729 - 732 - 735 - 738 - 741 - 744 - 747 - 750 - 753 - 756 - 759 - 762 - 765 - 768 - 771 - 774 - 777 - 780 - 783 - 786 - 789 - 792 - 795 - 798 - 801 - 804 - 807 - 810 - 813 - 816 - 819 - 822 - 825 - 828 - 831 - 834 - 837 - 840 - 843 - 846 - 849 - 852 - 855 - 858 - 861 - 864 - 867 - 870 - 873 - 876 - 879 - 882 - 885 - 888 - 891 - 894 - 897 - 900 - 903 - 906 - 909 - 912 - 915 - 918 - 921 - 924 - 927 - 930 - 933 - 936 - 939 - 942 - 945 - 948 - 951 - 954 - 957 - 960 - 963 - 966 - 969 - 972 - 975 - 978 - 981 - 984 - 987 - 990 - 993 - 996 - 999 -
Buscamos ahora los múltiplos de 11 utilizando el bucle do ... while y el signo de no igualdad <>:
<php
$i = 0;
do {
if (i % 11 <> 0)
{
continue;
}
echo $i, ' - ';
}
while ($i++ < 1000);
?>
El resultado será:
0 - 11 - 22 - 33 - 44 - 55 - 66 - 77 - 88 - 99 - 110 - 121 - 132 - 143 - 154 - 165 - 176 - 187 - 198 - 209 - 220 - 231 - 242 - 253 - 264 - 275 - 286 - 297 - 308 - 319 - 330 - 341 - 352 - 363 - 374 - 385 - 396 - 407 - 418 - 429 - 440 - 451 - 462 - 473 - 484 - 495 - 506 - 517 - 528 - 539 - 550 - 561 - 572 - 583 - 594 - 605 - 616 - 627 - 638 - 649 - 660 - 671 - 682 - 693 - 704 - 715 - 726 - 737 - 748 - 759 - 770 - 781 - 792 - 803 - 814 - 825 - 836 - 847 - 858 - 869 - 880 - 891 - 902 - 913 - 924 - 935 - 946 - 957 - 968 - 979 - 990 -
Las tablas de multiplicar con el bucle for:
Construimos la tabla de multiplicar de un solo número:
|
La tabla de multiplicar del 7 es: 7 x 1 = 77 x 2 = 14 7 x 3 = 21 7 x 4 = 28 7 x 5 = 35 7 x 6 = 42 7 x 7 = 49 7 x 8 = 56 7 x 9 = 63 7 x 10 = 70 7 x 11 = 77 7 x 12 = 84 |
Ahora dentro de una tabla:
|
<?php
|
|
Y ahora todas las tablas de multiplicar, una en cada columna de un tabla.
< ?php
echo "<table border=1 cellspacing=1>\n";
for ($contador1=0; $contador1<=10; $contador1++)
{
echo "<tr><td>tabla del $contador1 </tr></td>";
for ($contador2=0; $contador2<=10; $contador2++)
{
$total0=$contador1*$contador2;
echo "<td>$contador1 x $contador2 = $total0</td>";
}
}
?>
| tabla del 0 | 0 x 0 = 0 | 0 x 1 = 0 | 0 x 2 = 0 | 0 x 3 = 0 | 0 x 4 = 0 | 0 x 5 = 0 | 0 x 6 = 0 | 0 x 7 = 0 | 0 x 8 = 0 | 0 x 9 = 0 | 0 x 10 = 0 |
| tabla del 1 | 1 x 0 = 0 | 1 x 1 = 1 | 1 x 2 = 2 | 1 x 3 = 3 | 1 x 4 = 4 | 1 x 5 = 5 | 1 x 6 = 6 | 1 x 7 = 7 | 1 x 8 = 8 | 1 x 9 = 9 | 1 x 10 = 10 |
| tabla del 2 | 2 x 0 = 0 | 2 x 1 = 2 | 2 x 2 = 4 | 2 x 3 = 6 | 2 x 4 = 8 | 2 x 5 = 10 | 2 x 6 = 12 | 2 x 7 = 14 | 2 x 8 = 16 | 2 x 9 = 18 | 2 x 10 = 20 |
| tabla del 3 | 3 x 0 = 0 | 3 x 1 = 3 | 3 x 2 = 6 | 3 x 3 = 9 | 3 x 4 = 12 | 3 x 5 = 15 | 3 x 6 = 18 | 3 x 7 = 21 | 3 x 8 = 24 | 3 x 9 = 27 | 3 x 10 = 30 |
| tabla del 4 | 4 x 0 = 0 | 4 x 1 = 4 | 4 x 2 = 8 | 4 x 3 = 12 | 4 x 4 = 16 | 4 x 5 = 20 | 4 x 6 = 24 | 4 x 7 = 28 | 4 x 8 = 32 | 4 x 9 = 36 | 4 x 10 = 40 |
| tabla del 5 | 5 x 0 = 0 | 5 x 1 = 5 | 5 x 2 = 10 | 5 x 3 = 15 | 5 x 4 = 20 | 5 x 5 = 25 | 5 x 6 = 30 | 5 x 7 = 35 | 5 x 8 = 40 | 5 x 9 = 45 | 5 x 10 = 50 |
| tabla del 6 | 6 x 0 = 0 | 6 x 1 = 6 | 6 x 2 = 12 | 6 x 3 = 18 | 6 x 4 = 24 | 6 x 5 = 30 | 6 x 6 = 36 | 6 x 7 = 42 | 6 x 8 = 48 | 6 x 9 = 54 | 6 x 10 = 60 |
| tabla del 7 | 7 x 0 = 0 | 7 x 1 = 7 | 7 x 2 = 14 | 7 x 3 = 21 | 7 x 4 = 28 | 7 x 5 = 35 | 7 x 6 = 42 | 7 x 7 = 49 | 7 x 8 = 56 | 7 x 9 = 63 | 7 x 10 = 70 |
| tabla del 8 | 8 x 0 = 0 | 8 x 1 = 8 | 8 x 2 = 16 | 8 x 3 = 24 | 8 x 4 = 32 | 8 x 5 = 40 | 8 x 6 = 48 | 8 x 7 = 56 | 8 x 8 = 64 | 8 x 9 = 72 | 8 x 10 = 80 |
| tabla del 9 | 9 x 0 = 0 | 9 x 1 = 9 | 9 x 2 = 18 | 9 x 3 = 27 | 9 x 4 = 36 | 9 x 5 = 45 | 9 x 6 = 54 | 9 x 7 = 63 | 9 x 8 = 72 | 9 x 9 = 81 | 9 x 10 = 90 |
| tabla del 10 | 10 x 0 = 0 | 10 x 1 = 10 | 10 x 2 = 20 | 10 x 3 = 30 | 10 x 4 = 40 | 10 x 5 = 50 | 10 x 6 = 60 | 10 x 7 = 70 | 10 x 8 = 80 | 10 x 9 = 90 | 10 x 10 = 100 |