<< Bases de Datos php mysql

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ñana

Instrucciones 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.'>';
}
?>

Encabezados HTML ordenados del 1 al 6

Encabezados HTML ordenados del 1 al 6

Encabezados HTML ordenados del 1 al 6

Encabezados HTML ordenados del 1 al 6

Encabezados HTML ordenados del 1 al 6
Encabezados HTML ordenados del 1 al 6

 

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:

<?PHP
$n = 7;
print ("<P>La tabla de multiplicar del $n es:</P>\n");
for ($i=1; $i<=12; $i++)
print ("$n x $i = " . $n*$i . "<BR>\n");
?>

La tabla de multiplicar del 7 es:

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
7 x 11 = 77
7 x 12 = 84

Ahora dentro de una tabla:

<?php
echo "<table border=1 cellspacing=1>\n";
for ($i=1;$i<=12;$i++){
echo "<tr>\n";
for ($j=1;$j<=12;$j++){
echo "<td>".$j*$i."</td>\n";
}
echo "</tr>\n";
}
echo "</table>";
?>

1 2 3 4 5 6 7 8 9 10 11 12
2 4 6 8 10 12 14 16 18 20 22 24
3 6 9 12 15 18 21 24 27 30 33 36
4 8 12 16 20 24 28 32 36 40 44 48
5 10 15 20 25 30 35 40 45 50 55 60
6 12 18 24 30 36 42 48 54 60 66 72
7 14 21 28 35 42 49 56 63 70 77 84
8 16 24 32 40 48 56 64 72 80 88 96
9 18 27 36 45 54 63 72 81 90 99 108
10 20 30 40 50 60 70 80 90 100 110 120
11 22 33 44 55 66 77 88 99 110 121 132
12 24 36 48 60 72 84 96 108 120 132 144

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 = 00 x 1 = 00 x 2 = 00 x 3 = 00 x 4 = 00 x 5 = 00 x 6 = 00 x 7 = 00 x 8 = 00 x 9 = 00 x 10 = 0
tabla del 1
1 x 0 = 01 x 1 = 11 x 2 = 21 x 3 = 31 x 4 = 41 x 5 = 51 x 6 = 61 x 7 = 71 x 8 = 81 x 9 = 91 x 10 = 10
tabla del 2
2 x 0 = 02 x 1 = 22 x 2 = 42 x 3 = 62 x 4 = 82 x 5 = 102 x 6 = 122 x 7 = 142 x 8 = 162 x 9 = 182 x 10 = 20
tabla del 3
3 x 0 = 03 x 1 = 33 x 2 = 63 x 3 = 93 x 4 = 123 x 5 = 153 x 6 = 183 x 7 = 213 x 8 = 243 x 9 = 273 x 10 = 30
tabla del 4
4 x 0 = 04 x 1 = 44 x 2 = 84 x 3 = 124 x 4 = 164 x 5 = 204 x 6 = 244 x 7 = 284 x 8 = 324 x 9 = 364 x 10 = 40
tabla del 5
5 x 0 = 05 x 1 = 55 x 2 = 105 x 3 = 155 x 4 = 205 x 5 = 255 x 6 = 305 x 7 = 355 x 8 = 405 x 9 = 455 x 10 = 50
tabla del 6
6 x 0 = 06 x 1 = 66 x 2 = 126 x 3 = 186 x 4 = 246 x 5 = 306 x 6 = 366 x 7 = 426 x 8 = 486 x 9 = 546 x 10 = 60
tabla del 7
7 x 0 = 07 x 1 = 77 x 2 = 147 x 3 = 217 x 4 = 287 x 5 = 357 x 6 = 427 x 7 = 497 x 8 = 567 x 9 = 637 x 10 = 70
tabla del 8
8 x 0 = 08 x 1 = 88 x 2 = 168 x 3 = 248 x 4 = 328 x 5 = 408 x 6 = 488 x 7 = 568 x 8 = 648 x 9 = 728 x 10 = 80
tabla del 9
9 x 0 = 09 x 1 = 99 x 2 = 189 x 3 = 279 x 4 = 369 x 5 = 459 x 6 = 549 x 7 = 639 x 8 = 729 x 9 = 819 x 10 = 90
tabla del 10
10 x 0 = 010 x 1 = 1010 x 2 = 2010 x 3 = 3010 x 4 = 4010 x 5 = 5010 x 6 = 6010 x 7 = 7010 x 8 = 8010 x 9 = 9010 x 10 = 100