Logo Studenta

Curso PHP: Tipos de Dados

¡Este material tiene más páginas!

Vista previa del material en texto

T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S
 TEMARIO DE CURSO 
 PROGRAMACIÓN PHP 
 
 CAPÍTULO 1: 
 INSTALACIÓN. 
 VARIABLES Y 
 ENTRADA-SALIDA DE DATOS 
 © Iñaki Martín 
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
http://creativecommons.org/licenses/by-nc-nd/4.0/
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S 2 Índice
COMO SE HAN DE LEER ESTOS APUNTES 
• Se pueden leer los diferentes apartados en el orden establecido, y acudir al 
documento anexo de ejercicios ir realizando los correspondientes a cada capítulo 
• Asimismo, en cada capítulo comienza con una guía resumen, que no es necesario 
leer inicialmente, sol ose aporta para posteriores consultas rápidas 
• Los contenidos de los documentos están escritos con diferentes formatos, que 
atienden a estos modelos; 
o Los textos en morado son ejemplos de sintaxis de instrucciones 
o Los textos en verde son palabras claves, o elementos del lenguaje 
o El texto marcado en rojo significa un concepto al que hay que prestarle 
especial atención 
Los textos con este fondo son ejemplos de código. 
Las palabras claves van en verde y el resto de 
codigo con otros colores
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
Temas avanzados : No Obligatorios
• Los textos enmarcados en un cuadro de fondo violeta son 
conceptos avanzados. 
• Inicialmente NO es necesario leerlos ni aprenderlos 
• Aportan algo más de profundidad sobre la materia que se esté 
exponiendo, pero pueden provocar confusión por necesitar 
mayor nivel del adquirido para comprenderse (más tarde se 
verán). 
http://creativecommons.org/licenses/by-nc-nd/4.0/
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S 3
๏ Conocimientos de lenguajes de marcas, qué son, y específicamente, conocimientos de HTML y de CSS a nivel inicial 
(creación de secciones, listas, tablas, formularios, …) 
Requisitos
Requisitos para el curso PHP
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S 4Modelo de programa PHP
๏ Como ya se ha comentado, los programas en PHP se escriben en unidades llamadas scripts. 
๏ Un script se escribe encerrado entre etiquetas (hay diferentes variantes): 
Etiquetas convencionales Etiquetas de apertura corta (short_open_tag) 
<?php 
 … instrucciones php … 
?>
<? 
 … instrucciones php … 
?>
Para poder usar las etiquetas de apertura corta, hay que configurar en el fichero php.ini la propiedad “short_tags”, cabiándola a “On” 
si estuviera a “Off”. Puede que no sea necesario, pues la mayoría de los servidores modernos ya la inicializan directamente a “On”
Puede haber problemas con el uso de las etiquetas de apertura corta si se usa en conjunción con XML, pues para XML “<?” significa 
“comienzo de función”. En estos casos se puede cambiar la etiqueta de apertura corta por “<?=“.
๏ Un script PHP se puede ejecutar: 
‣ Como aplicación de consola. 
En este caso, normalmente una aplicación de servidor, se crea el script dentro de un fichero con extensión .php 
y se “arranca” con un compilador PHP, un programa que se invoca desde consola 
‣ Como aplicación en un navegador: 
Es el caso que vamos a seguir en estos apuntes. En este caso, el código PHP se combina con código HTML 
(y CSS si se desea) para mostrar los resultados en un navegador de internet (Chrome, IExplorer, Firefox, etc) 
 Modelo de programa PHP
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S 5PHP y HTML
๏ La combinación de HTML y PHP puede hacerse de varias formas: 
1. Meter los scripts PHP dentro de un fichero html, en cualquier parte del fichero .html 
El servidor traduce todo lo que encuentra como si fuera HTML, salvo lo que este dentro de las etiquetas de PHP, 
que se lo envía al compilador PHP para que lo ejecute, y al navegador se le envía ya solo código html (con el PHP 
convertido) 
2. Meter los scripts PHP dentro de un fichero .php, y opcionalmente, añadir código html. El fichero .php puede ser 
llamado directamente por el navegador, al igual que se hace con un fichero .html
<html> 
<head></head> 
<body> 
<?php for($i=1;$i<=5;$i++){ ?> 
Vuelta <?php echo $i; ?> 
<br> 
<?php } ?> 
</body> 
</html>
<?php 
echo "<html>"; 
echo "<head></head>"; 
echo "<body>"; 
echo "Hola, el dia de hoy es: "; 
// se puede mostrar tambien en html el 
// resultado de una expresion PHP 
echo date('l, F jS, Y'); 
echo "</body>"; 
echo "</html>"; 
?>
<html> 
<head></head> 
<body> 
Hola, el día de hoy es: 
<?php 
// se puede mostrar tambien en html el 
// resultado de una expresion PHP 
echo date('l, F jS, Y'); 
?> 
</body> 
</html>
• El código html se puede invocar con la 
instrucción echo
• O bien se puede incluir fuera de las etiquetas 
PHP, como si de un fichero html se tratara
Combinando HTML y PHP
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S 6
๏ Como ya se ha comentado, los programas en PHP se dividen en unidades llamadas scripts. En el mismo fichero 
puede haber múltiples scripts combinados con código html.
Características de un programa PHP
๏ Las instrucciones PHP acaban en un punto y coma (;). 
Mientras que no se encuentre este signo, PHP supone que la instrucción continua. Cuando se encuentra con el, 
supone que se inicia una nueva instrucción 
๏ En PHP, sus instrucciones y funciones no son sensibles a mayusculas / minúsculas. 
๏ Sin embargo, si son sensibles los nombres de las variables que crea el usuario: 
๏ Una comentario se escribe en cualquier parte de una línea, comenzando con // 
A partir de estas barras, PHP no hace caso de los que haya, y sirve para escribir información que nos valga para 
explicar lo que se hace o cualquier información interesante. El comentario acaba cuando se cambia de línea. 
๏ Para escribir un comentario de varias líneas, se puede hacer escribiendo lo que se desee empezando por /* y 
acabando con */ 
<?php 
 echo “hola “; // Las tres lineas hacen lo mismo 
 ECHO “hola “; // Las tres lineas hacen lo mismo 
 Echo “hola “; // Las tres lineas hacen lo mismo
<?php 
$NOMBRE = "Pepe"; 
$Nombre = "Ana"; 
echo $NOMBRE; // mostrará Pepe en el navegador
// comentario de toda una linea 
$NOMBRE = "Pepe"; // comentario en final de linea 
/* 
 comentario que puede 
 ocupar mas de una linea enterita 
 */ 
echo /* comentario en mitad de una linea */ "<body>";
Características de un programa PHP
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S 7Variables 
๏ Una variable es el nombre que le damos a una información cuando la almacenamos en la memoria del ordenador 
Al almacenar un literal en la memoria, para hacer uso de él posteriormente, se le ha de dar un nombre para 
identificarlo. Eso es una variable. 
๏ En PHP los nombres de las variables deben respetar un formato: 
‣ Comienzan siempre con el signo $, seguido del nombre de la variable 
‣ Tras el $, pueden contener números y letras, o un guión bajo ( _ ) 
‣ Tras el $, deben comenzar siempre por una letra, o un guion bajo. Nunca por un dígito 
‣ No pueden contener espacios en blanco 
‣ No se puede usar una palabra reservada PHP 
๏ En PHP las variables no tienen que estar asociadas a un tipo específico de datos, la misma variable que ahora 
almacena un numero puede en la linea siguiente almacenar un cadena, o un array 
๏ En PHP no hace falta declarar (construir) una variable, si no se desea. Una variable se creaen el momento en 
el que se le asigna un valor por primera vez 
•$VAR = 12; // se crea la variable VAR y se le da un valor 
$VAR = 12.44; // se modifica el valor a la variable VAR ya creada previamente
Variables
Construir (declarar) variables
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S 8Tipos de datos. Introducción.
๏ PHP puede manejar, y almacenar, información de diferente tipos, que de modo básico pueden ser: 
- Números enteros o reales. 
- Cadenas de texto. Las cadenas de texto están compuestas por cero, uno o más caracteres. Un carácter es cualquier 
símbolo que se puede escribir, o incluso no escribir (como el salto de linea, por ejemplo) 
Las cadenas deben escribirse encerradas entre comillas, da igual que sean dobles o simples 
- Valores booleanos. 
$VAR = "En un lugar de la Mancha"; // cadena de texto 
$VAR = 'En un lugar de la Mancha'; // otra cadena de texto 
$VAR = " Eva "; // esta cadena tiene 5 caracteres, cuidado que los espacios cuentan 
$VAR = ""; // una cadena vacía, que no tiene contenido 
$VAR = " "; // una cadena que si tiene contenido, que es un espacio en blanco
$VAR = 12; // un valor numerico entero 
$VAR = 12.44; // un valor numerico decimal 
$VAR = 51 + 44.72; // una calor resultado de una operacion entre distintos numeros
$VAR1 = true; // un valor booleano true 
$VAR2 = false; // un valor booleano false 
$VAR3 = (3 > 4); // una operacion que da como resultado valor booleano false
Tipos de datos
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S 9
๏ En PHP se puede decir a dónde y desde dónde se quiere leer y escribir información. 
๏ El destino, por ahora, dónde se escribe la información, es la pagina web que esta invocando los scripts PHP. 
๏ El de dónde se lea, se verá mas adelante al hablar de interacción con formularios
๏ PHP provee varias instrucciones y funciones para mostrar datos dentro del HTML donde se incrusta
‣ Escribe la cadena que usa como parámetro dentro del HTML. 
‣ Puede escribir varias cadenas, separadas por comas. 
‣ Si la cadena esta creada con comillas dobles, convierte las referencias internas en su valor, si esta creada 
con comilla simples, no convierte nada y escribe literalmente su contenido:
$x = "Buenas "; 
echo ($x); // se puede usar como función, con parentesis 
echo $x; // o tambien sin parentesis; 
$x2 = "$x tardes"; // x2 valdra "Buenas tardes" 
$x3 = '$x tardes'; // x3 valdra "$x tardes" 
echo $x2, $x3, "<br>"; // puedo escribir varias cadenas separadas por comas 
echo $x2 . $x3 . "<br>"; // idem antes
‣ Algunos valores como true o false o algún valor devuelto por alguna función no es legible en un documento html, 
por lo que hay que usar las funciones print_r() o var_dump() - ver en páginas siguientes - 
Entrada y salida de información
Salida de datos.
ECHO
Entrada y salida de datos en PHP
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S 10
$x = "Buenas "; 
print ($x); // se puede usar como función, con parentesis 
print $x; // o tambien sin parentesis; 
$x2 = "$x tardes"; // x2 valdra "Buenas tardes" 
print $x2 . "<br>"; // unico modo de concatenar dentro del print 
‣ Prácticamente idéntica a ECHO 
‣ No puede escribir varias cadenas separadas por comas, ha de usarse el operador punto.
$entrada = array("a", "b", "c", "d", "e"); 
print_r($entrada); // [0] => a [1] => b [2] => c [3] => d [4] => e 
$nombre = "Eva"; 
$w = "Bienvenida $nombre"; 
print_r($w); // asi solo escribe en el html Bienvenida Eva 
$sol = print_r($w. " otra vez", true); // asi guarda el resultado en la variable sol 
echo $sol; // ahora escribe Bienvenida Eva otra vez
‣ Además de escribir la información, puede devolver lo escrito para recogerlo en una variable, si se usa true como 
segundo parámetro de la función:
echo 4 == 4; // Escribe 1 (que es como decir true) 
echo 4 == 3; // NO ESCRIBE NADA 
echo 4 === "4"; // NO ESCRIBE NADA 
print_r(4 == 3); // NO ESCRIBE NADA 
var_dump(4 == 3); // SI ESCRIBE, y escribe: bool(false)
‣ Devuelve la información en formato legible, pues a veces valores como false no son legibles. 
‣ Además del valor, devuelve información del tipo de la variable.
VAR_DUMP
PRINT_R
PRINT
‣ Permite escribir, además de una cadena, un array o elemento complejo, cosa que echo y print no pueden
Entrada y salida de datos en PHP
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S 11Entrada y salida de datos en PHP
๏ Ante nada, dejar claro que PHP no se usa normalmente como interface de usuario, el origen de los datos que 
procesa normalmente es una página html o un servicio externo, con lo que no es habitual que un usuario provea 
información directamente a una programa PHP 
๏ Sin embargo, puede ejecutarse un programa PHP por consola de comandos (shell de unix, por ejemplo) y en tal caso si 
se puede hacer que se interactúe solicitando datos al usuario 
๏ Además, algunos IDES (PHPStorm, Eclipse, ...) disponen de una consola donde se pueden ejecutar los programas PHP 
en vez de enviar la salida a un navegador 
๏ Para ambos casos, ofrecemos un par de soluciones para leer datos del usuario:
‣ Funciona igual que scanf() en C, indicando como primer parámetro el flujo de entrada de datos. Ejemplo:
$a=1; 
fscanf(STDIN, "%d ", $a); 
print ($a);
Entrada de datos.
fscanf()
la variable/s que se usan en fscanf deben existir y preferiblemente estar inicializadas
STDIN hace referencia a la entrada estándar del equipo, normalmente, el teclado
‣ Funciona tambien similar al gets() en C. En este 
caxo, vamos a ir más lejos, y a ofrecer un ejemplo de 
una nueva función completa ideada por nosotros, que 
usando fgets, permite además que se indique un 
mensaje a la hora de solicitar los datos al usuario. 
(el uso de funciones aún no se ha explicado, pero basta con 
copiar en nuestros programas las líneas iniciales aquí 
expuestas, y luego usar la función leerLinea() como se indica 
en el ejemplo)
// definicion de nuestra funcion. 
// Debe ponerse antes de usarse en nuestro programa. 
function leerLinea($mensaje = '') { 
 echo $mensaje; 
 return rtrim(fgets(STDIN), "\n"); 
} 
// usando nuestra funcion 
$linea = leerLinea("Dime tu nombre: "); 
print("tu nombre es " . $linea);
fgets()
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S 12 Operadores aritméticos
Operadores aritméticos
+ Suma. Los operandos pueden ser enteros o reales
- Resta. Los operandos pueden ser enteros o reales
* Multiplicación. Los operandos pueden ser enteros o reales
/
Division. Los operandos pueden ser enteros o reales. 
Si ambos son enteros el resultado es entero. 
En cualquier otro caso el resultado es real.
%
Resto de la división. 
Los operandos pueden ser de tipo entero o real. 
El resultado tiene el mismo signo que el dividendo
** Exponente, eleva el primer operando a la potencia del segundo operando
๏ Se usan para operar matemáticamente con valores numéricos
echo ($VAR1 + $VAR2); echo"<br>"; // resultado: 25 
echo ($VAR1 - $VAR2); echo"<br>"; // resultado: 21 
echo ($VAR1 * $VAR2); echo"<br>"; // resultado: 46 
echo ($VAR1 / $VAR2); echo"<br>"; // resultado: 11.5 
echo ($VAR1 % $VAR2); echo"<br>"; // resultado: 1 
echo (- 24 % 7); echo"<br>"; // resultado: -3 
echo ($VAR1 ** $VAR2); echo"<br>"; // resultado: 529 (23 al cuadrado)
Operadores en PHP
Operadores aritméticos
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S 13
๏ Son los que se aplican para dar valora una variable. El más normal es el signo = 
๏ En PHP el signo igual es de asignación, no de igualdad, no tiene por lo tanto el mismo uso que en una 
expresión matemática. En matemáticas se puede hacer 
 x + y = 5 
pero esto en PHP no tiene sentido, pues en PHP siempre se debe colocar: 
• a la izquierda del igual, un nombre de variable que tomara un nuevo valor. Solo una variable. 
• a la derecha del igual, el nuevo valor que se le da a la variable. 
๏ La asignación en cadena permite que varias variables tomen el mismo valor: 
 Operadores de asignación
๏ Existen operadores que se usan para simplificar expresiones de asignación, pero siempre se ha de recordar 
que se trata de asignar valor a una variable. 
๏ Por ejemplo, la expresión 
se puede expresar resumidamente con el operador +=, 
Operadores aritméticos (asignación / reasignación)
 = Asignación
+= Suma y asignación. Hace el formato de un sumador (ver ejemplo más abajo)
-= Resta y asignación
*= Multiplicación y asignación
/= División y asignación
%= Resto de división y asignación
$VAR1 = $VAR1 + 23; 
$VAR1 += 23; 
$VAR1 = $VAR2 = $VAR3 = 3; 
Operadores de asignación 
๏ Además de +=, existen 
otras variantes para otras 
operaciones. Este cuadro 
resume todos los 
operadores de asignación :
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S 14
๏ Estos operadores afectan a un solo operando, esto es, afectan a una variable o número, no operan entre dos 
๏ Los operando unarios en PHP son ; 
๏ Los signos + y - dan valor positivo o negativo a la expresión o variable siguiente; 
๏ Los incrementos y decrementos unitarios pueden ser como sufijo o como prefijo ( w++ o bien ++w ) 
✴ Si es como prefijo, se efectúa primero el incremento de la variable, y luego ésta se evalúa en el resto de la 
expresión (si hubiera). 
✴ Si es como postfijo, primero la variable devuelve el valor a la expresión, y posteriormente se incrementa
 Operadores unarios
Operadores aritméticos (asignación / reasignación)
+ Signos negativo y positivo
++ -- 
Incremento y decremento de una unidad. Al aplicarse hacen la función de un 
contador (ver ejemplo)
! Negación
$n = 10; 
$x = ++ $n; // Aquí es prefijo, al final x=11 y n=11 
echo $x; // es como hacer n=n+1 y luego x=n 
echo $n; 
// -------------------------------------- 
$n = 10; 
$x = $n ++; // Aquí es postfijo, al final x=10 y n=11 
echo $x; // es como hacer x=n y luego n=n+1 
echo $n;
$y = 5; 
$h = - $y; // h vale -5
Operadores unarios
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S 15
๏ Devuelven un valor boolean 
๏ Comparan dos valores (una variable o un valor) y devuelven un valor true o false. 
๏ Se pueden encadenar varias comparaciones, con los operadores lógicos que se ven en la pagina siguiente 
๏ Si en la comparación intervienen cadenas con valores numéricos, entre sí o con con un numero, la cadena 
se convierte a numero antes de la comparación, y esta se realiza regionalmente. 
 Operadores relacionales
Operadores relacionales
> Mayor que Devuelve TRUE si el primer operando es mayor que el segundo
< Menor que Devuelve TRUE si el primer operando es menor que el segundo
>= Mayor o igual que Devuelve TRUE si el primer operando es mayor o igual que el segundo
<= Menor o igual que Devuelve TRUE si el primer operando es menor o igual que el segundo
 == Igual Devuelve TRUE si el primer operando tiene el mismo valor que el segundo
!= <> Distinto que Devuelve TRUE si el primer operando tiene distinto valor que el segundo
 === Idéntico Devuelve TRUE si el primer operando tiene el mismo valor que el segundo, y ambos son del mismo tipo de dato
!== No Idéntico Devuelve TRUE si el primer operando tiene distinco valor que el segundo, y bien ambos son de distinto tipo de 
dato
<=> Comparación completa Devuelve 1 si el primer operando es mayor que el segundo, 0 si ambos son iguales, y -1 si el segundo es mayor 
que el primero. Se le llama también el operador “nave espacial”
Cuidado!: Uno de los errores típicos es confundir el operador =, que es el de asignación, con el operador == , que es 
el condicional de comparación. Asignar no es lo mismo que comparar.
var_dump(0 == "0"); // 0 == 0 -> true 
var_dump(0 === "0"); // 0 === 0 -> false 
var_dump(0 == "a"); // 0 == 0 -> true 
var_dump("1" == "01"); // 1 == 1 -> true 
var_dump(100 == "100.00"); // 100 == 100 -> true
Cuidado!: Los datos de tipo float (coma flotante, como 1.2e3) se almacenan de modo especial en PHP, por lo que 
no se deben comparar con los operadores ordinarios de comparación.
Operadores relacionales
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S 16
๏ Sirven para encadenar varias comparaciones 
๏ Devuelven, al igual que los operadores condicionales, un valor boolean. 
๏ Se aplican por lo tanto a dos o más operandos (menos el operador ! )
 Operadores Lógicos
Operadores lógicos
$p = $k = true ; 
$q=false; 
$a =5; 
$b=6; 
$k = $p && $q ; // $k es false 
$k = $p && ($q || $p); // $k ahora es true 
$q = ( $a==$b ) ; // $q es false 
Operadores lógicos
&& 
and
AND - El resultado es verdadero si todos los operandos son verdaderos. El resultado es falso en caso contrario. 
 Diferencias: 
actua como operador "cortocircuito": si se usa, en el momento en que uno de los operandos sea false, no se 
evalúan el resto de operandos, y el resultado es false. 
|| 
or
OR - El resultado es falso si los todos los operandos son falsos. Si alguno es verdadero el resultado es verdadero. 
 Diferencias: 
actua como operador "cortocircuito": si se usa, en el momento en que uno de los operandos sea true, no se 
evalúan el resto de operandos, y el resultado es true. 
!
NOT - Cambia el valor del operando de verdadero a falso y viceversa. 
Se aplica sobre un solo operando. 
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S 17
๏ Si se comparan valores booleanos con un AND, el resultado es 
‣ true si todos los valores son true, 
‣ false si algún valor es false 
๏ Si se comparan valores booleanos con un OR, el resultado es 
‣ true si alguno los valores son true, 
‣ false si todos los valores son false
 Operadores Lógicos
 Tabla de verdad de uso de valores booleanos aplicando AND y OR:
operando 1 operando AND operando 2 resultado
true && true true
true && false false
false && true false
false && false false
uso de AND
operando 1 operando OR operando 2 resultado
true || true true
true || false true
false || true true
false || false false
uso de OR
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S
Operadores de cadenas
.
Concatena las cadenas que son sus operandos. Si un operando es un numero, lo convierte en 
cadena y lo concatena igualmente 
.=
Efectúa la concatenación con efecto “sumador”
18 Operadores de cadenas y de ejecución
๏ Las comillas invertidas efectúan una ejecución de una instrucción de la shell del sistema operativo 
๏ Devuelven, al igual que una simple función, el resultado de la ejecución de la instrucción (no solo ejecutan en la 
shell sino que lo que se ejecuta se puede asignar a una variable).
Operadores de ejecución
`instruccion` Ejecuta en la shell del S.O. la instrucción y devuelve su resultado
$listado_del_ls = `ls -l`; 
echo "<pre>$listado_del_ls</pre>";
$x = "Buenas tardes"; 
print($x . " tenga usted"); 
print($x . " " . 23423);
๏ Existen dos operadores para poder “unir” cadenas, concatenarlas: el operador punto y punto-igual 
$x = "Buenas tardes"; 
$x .= " tenga usted"; 
// hace lo mismo que las dos lineas anteriores$a = "Buenas tardes"; 
$a = $a . " tenga usted"; 
print($x); 
print($a);
Operadores de ejecución
Operadores de cadenas
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S 19
๏ Contadores y sumadores son realmente unos conceptos, no unos operadores. Aunque realmente son 
operaciones normales, de asignación de valores, veremos que son tremendamente utilizadas en en el futuro 
๏ Se basan simplemente en el concepto de ir cambiando el valor de una misma variable. 
๏ Por el momento baste con entender que es lo que hacen, aunque no parezcan tener especial utilidad. Ésta ya 
aparecerá en pocos capítulos. 
 
Contadores y sumadores 
// -------------------------------------- CONCEPTO DE SUMADOR 
$p = 4; 
$x = 1; 
$m = 4; 
$p += 8; // es como p=p+8 , al final de la instrucción p vale 12 
$p = $p + 8; // este es el formato de un SUMADOR, si se repite muchas veces se 
 // suman varias veces 8 
$p = $p + $m; // este es otro formato de sumador, si se repite varias veces y m va 
 // cambiando de valor, sus valores se van sumando en la variable p 
//-------------------------------------- CONCEPTO DE CONTADOR 
$w = 2; 
$x = 2; 
$w ++; // w ha pasado a valer 3, no hace falta que se asigne a nada 
// este es el formato de un CONTADOR, si se repite varias veces se va 
// incrementando el valor de b en una unidad cada vez. Es igual que poner: 
$w = $w + 1;
Contadores y sumadores
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S 20
๏ Una variable en PHP puede ser de nivel de acceso local, global o static:
Acceso a las variables
function sumar($a, $b) { 
 $suma = $a + $b; 
 echo "<p>El resultado es: $suma</p>"; 
} 
sumar(3, 6); 
echo $suma; // DA ERROR 
๏ Una variable creada o declarada dentro de una función (veremos mas adelante cómo se hacen) solo puede 
usarse dentro de la función, se crea cada vez que se llama a la función y se destruye al acabar esta 
$nombre = "Paula"; 
function saludar() { 
 echo "Bienvenida $nombre"; // DA ERROR 
} 
echo "Hola $nombre"; // no da error 
saludar(); 
๏ Una variable declarada o creada fuera de una 
función solo puede usarse fuera de las funciones, 
$nombre = "Paula"; 
function saludar(){ 
 global $nombre; 
 echo "Bienvenida $nombre"; // NO da error 
} 
echo "Hola $nombre"; // no da error 
saludar() 
 
 
๏ Pero si se usa la instrucción global, antes de usar 
una variable global (previamente existente), se 
extiende su acceso a toda la función
Nivel de acceso de las variables
Variables GLOBALES
Variables LOCALES
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S 21
function contar() 
{ 
 static $valor = 0; 
 $valor = $valor + 1; 
 echo $valor . "<br>"; 
} 
contar(); 
contar(); 
contar();
๏ Una variable creada o declarada dentro de una función pierde su valor al acabar la función. 
๏ Sin embargo, se puede necesitar que el valor que tenga se mantenga entre diferentes ejecuciones de la 
función. Esto se puede conseguir creando la variable de modo global, pero también declarándola static 
๏ Así pues, una variable static no se destruye cada vez que se acaba la función. 
๏ La linea con la instrucción static, en cambio, solo se efectúa una vez, la primera vez que se pasa por ella, 
que es cuando se crea la variable:
El ejemplo anterior, si la variable $valor no fuera static, daría como resultado 1 , 1 y 1 
Si la variable $valor queda como en el ejemplo, static, da como resultado 1 , 2 y 3 
Variables STATIC
Acceso a las variables
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S
Temas avanzados : Mas sobre constantes
22
๏ Una constante es como una variable, pero que no puede cambiar su valor. 
๏ Se crean en PHP las constantes de dos modos: 
‣ con la función define: define (“nombrevariable”, valorvariable) 
‣ con la instrucción const: const nombrevariable = valorvariable 
๏ Por convenio general, los nombres de las constantes se escriben con todas las letras en mayúsculas. 
๏ Para acceder a los valores de las constantes, usar su nombre SIN el signo $ delante; 
๏ Al igual que con las superglobales (ver mas adelante) el acceso a las constantes es global incluso dentro de las 
funciones, esto es, se puede acceder a ellas desde cualquier parte del script
 Constantes
define("PRIMER_ANIO_DEL_SIGLO", 2001); 
define("ENERO_INGLES", "January");
echo PRIMER_ANIO_DEL_SIGLO;
const NUM_MESES = 12;
Constantes
Por otro lado, pueden incluso crearse constantes con el nombre de una palabra reservada de PHP, siempre que para acceder 
luego a su valor, se haga con la función constant():
define("echo", "January"); 
echo constant('echo')
La principal diferencia está en que con define, no funcionan las constantes definidas dentro de una clase, mientras que con const si 
funcionan, dentro y fuera de una clase 
Y aun ésto no es completamente cierto, pues a constantes de una clase se puede acceder, pero solo con la función constant(): constant('CLASS_NAME::CONST_NAME') 
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S 23Números aleatorios: función rand()
๏Se puede necesitar en ciertas situaciones que el programa genere números al azar (números aleatorios). 
PHP dispone de la función rand() para ello, con dos usos distintos, según se muestra en el ejemplo: 
$a = rand(); // gerena un numero entre 0 y 2147483647 
echo $a; 
echo "<br>"; 
$b = rand(2, 7); // gerena un número aleatorio entre 2 y 7, ambos inclusive 
echo $b; 
Números aleatorios
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S 24
๏ Un primer uso de las secuencias de escape es para escribir caracteres de control, que no son 
imprimibles o que no se pueden escribir directamente. 
๏ Una secuencia de escape es un “\”. La barra quiere decir pues que detrás de ella viene un carácter 
especial, que no se debe tratar como suele hacerse. 
๏ Pero se ha de tener en cuenta donde se esta pidiendo al script PHP que escriba, porque no se comporta 
igual si se escribe en un html que en otro destino. Veamos algunas de las secuencias de escape más 
usadas y como se trata en cada caso : 
\" Se usa para poder escribir el carácter comilla doble ( " ) desde una cadena que esta también delimita 
por comillas dobles 
Por ejemplo, si yo quiero que se muestre en pantalla: Soy “Pepe”, pero me llamo José no puedo 
escribir 
pues las comillas de delante de Pepe las considera como el fin de la cadena, y luego Pepe no lo 
entiende… 
Así que hay usar una secuencia de escape, poniendo en la cadena \” donde queríamos poner 
“ indicando que lo que va detrás del \ no lo tenga en cuenta tal y como suele, sino que es un 
carácter que (ahora si) debe imprimirlo expresamente:
Salida de datos: Secuencias de escape (I)
Secuencias de escape
echo("Soy "Pepe", pero llamo José");
echo("Soy \"Pepe\", pero llamo José");
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
1.- Tipos de datos y E/S 25
\' Igual que con las comillas dobles, en este caso, su uso es para escribir explícitamente una comilla simple 
\\ Igual que con las comillas dobles, en este caso, su uso es para escribir explícitamente una barra invertida 
\n En este caso, lo que se pretende es forzar a que se ejecute un salto de línea. 
Pero cuidado, esta funcionalidad no es válida si se desea salida en html, pues el navegador no reconoce 
esta secuencia. 
Si se desea un salto de línea con html, usar sus etiquetas (como por ejemplo <br> ) o usar css. 
Por ejemplo, esto escribe dos líneasrealmente si se escribe en un fichero o en algún soporte que 
reconozca el salto de línea como secuencia de escape, pero no en un html: 
Para un html, hubiéramos necesitado hacer 
\t En este caso, lo que se pretende es forzar a que se ejecute un tabulador, 
pero con las mismas pegas que se han visto para los saltos de línea. 
Salida de datos: Secuencias de escape (II)
print("Esto es una linea\ny esto es la linea siguiente");
print("Esto es una línea <BR> y esto es la linea siguiente");
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
2.- Bifurcaciones 1
 TEMARIO DE CURSO 
 PROGRAMACIÓN PHP 
 
 CAPÍTULO 2 
 BIFURCACIONES 
 
 © Iñaki Martín 
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
http://creativecommons.org/licenses/by-nc-nd/4.0/
http://creativecommons.org/licenses/by-nc-nd/4.0/
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
2.- Bifurcaciones 2 if / switch: Resumen
IF 
if ($edad > 17) { 
 print(“Es mayor de edad"); 
}
IF ELSE
if ($edad > 18) { 
 print("Es mayor de edad"); 
} else { 
 print(“No es mayor de edad"); 
} 
IF ELSE IF
if ($edad > 65) { 
 print("Esta jubilado"); 
} else if ($edad > 17) { 
 print("Ha acabado el colegio"); 
} else if ($edad > 5) { 
 print("Esta en primaria"); 
} else { 
 print(“No ha empezado a ir al cole"); 
}
IF ANIDADOS
SWITCH
if ($edad > 15) { 
 if ($edad > 17) { 
 print(“Puede ir a la universidad"); 
 } else { 
 print("Puede hacer bachillerato"); 
 } 
}else{ 
 print(“Aun debe ir al colegio"); 
} 
switch ($b) { 
 case 0: //puede estar vacío 
 case 1: 
 case 2: 
 print(“< 3”); 
 break; 
 case 3: 
 print("= 3"); 
 break; 
 default: 
 print(“> 3"); 
}
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
2.- Bifurcaciones 3
๏ La instrucción if sirve para ejecutar condicionalmente algunas instrucciones. 
๏ Evalúa una condición y, si esta se cumple, se ejecutan las instrucciones especificadas en un bloque, y si no 
se cumplen, no se ejecutan. 
๏ La instrucción else es complementaria al if y contiene un bloque de instrucciones que sólo se ejecutan si NO 
se cumple la condición analizada en el if . 
 Instrucción if (I)
 If - then - else
// if (condición) { 
// (instrucciones que se ejecutan si la condición es cierta) 
// } 
// else { 
// (instrucciones que se ejecutan si la condición no es cierta) 
// } 
$a = 6; 
$b = 6; 
if ($a == $b) { 
 echo "a es igual que b"; 
} else { 
 echo "a no es igual que b"; 
}
Cuidado: 
Uno de los errores mas típicos de un if es evaluar la condición con el operador =, 
que es el de asignación, recordar que el operador lógico para comparar es ==
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
2.- Bifurcaciones 4
๏ La condición ha de ser una expresión que de un resultado de tipo boolean (true o false) 
๏ La instrucción else y su bloque son opcionales 
๏ Las llaves no son obligatorias si hay solo una instrucción, aunque son recomendable 
๏ Se pueden anidar varios if encadenados
 Instrucción if (II) 
if ($a <= $b) { 
 if ($a == $b) { 
 echo "a es igual que b"; 
 } else { 
 echo "a es menor que b"; 
 } 
} else { 
 echo "a es mayor que b"; 
}
Reglas de uso de if
๏ Si tras un else se desea introducir un nuevo if, se puede hacer uso de la sintaxis else if 
if ($a < $b) { 
 echo "a es menor que b"; 
} else if ($a == $b) { 
 echo "a es igual que b"; 
} else { 
 echo "a es mayor que b"; 
}
else if
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
2.- Bifurcaciones
๏ Veamos algún ejemplo del uso del if con else if : 
Enunciado: Dar a una variable el valor de una nota, de 0 a 10, y mostrarla de la forma: Insuficiente, Suficiente, Bien.... 
Ejemplo de if
$nota = 8; 
if ($nota < 5) { 
 echo "Suspenso"; 
} else if ($nota >= 5 and $nota < 7) { 
 echo "Bien"; 
} else if ($nota >= 7 and $nota < 9) { 
 echo "Notable"; 
} else if ($nota >= 9) { 
 echo "Sobresaliente"; 
}
5
Ejemplo de if
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
2.- Bifurcaciones 6Operador if 
๏ Se trata de un operador, no de una instrucción. Como operador que es, devuelve un valor, esto es, realiza una 
operación que devuelve un valor, valor que como siempre o se guarda en una variable o se envía a un método como 
parámetro. 
๏ Este operador evalúa una condición, que si es cierta, devuelve un valor, y si es falsa, devuelve otro distinto 
Formato : 
 
 en el ejemplo, evalúa p>10 
✴ si la condición es true, el valor resultante es lo de detrás de ? (p*1 en este caso) 
✴ si la condición es false, el valor resultante es lo de detrás de : (p-12 en este caso) 
๏ En otro ejemplo comparado con un if normal: $w = 3; 
$p = 6; 
$h = 0; 
// aqui con un if normal 
if ($w < 10) { 
 $h = $p; 
} else { 
 $h = $a * 10; 
} 
// este es el if anterior, en formato if abreviado 
$h = ($w < 10) ? $p : $a * 10; 
echo $h;
// (condición que se evalúa) ? (valor que se devuelve si la condición es true) : (valor que se devuelve si la condición es false) 
$p=6; 
$res = ($p>10) ? $p*1 : $p-12 ;
Operador condicional (if abreviado) 
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
2.- Bifurcaciones 7
๏ switch permite hacer una ejecución selectiva de instrucciones dependiendo del valor de una expresión 
๏ En este caso no se trata de una expresión booleana, sino de una expresión que devuelve un valor. 
๏ Se mira el valor de la expresión, y se ejecutan las órdenes del bloque cuyo valor es igual a expresión: 
switch (expresión) { 
 case valor1: 
 instrucciones ; 
 break; 
 case valor2: 
 instrucciones ; 
 break; 
 default: 
 instrucciones ; 
} 
 Instrucción switch (I)
๏ No puede haber dos case con el mismo valor 
๏ Default se ejecuta si no se ha cumplido algún case, y es optativo. 
๏ La expresión que se analiza puede ser numérica o una cadena
$a = 1; 
switch ($a) { 
 case 1: 
 echo "a tiene valor 1"; 
 break; 
 case 2: 
 echo "a tiene valor 2"; 
 break; 
}
Switch
Reglas de uso de switch
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
2.- Bifurcaciones 8
๏ La sentencia break provoca que se termine inmediatamente la ejecución del resto del switch. 
๏ Pero cuidado, que una vez que se cumple un case, si no encuentra un break, se ejecutan todos los case 
siguientes ¡¡aunque el resultado de la expresión no coincida con el valor indicado en el case!! 
๏ Analizar este ejemplo y ver su resultado: 
 El uso de break en un switch
El resultado que se ve en consola es 
 a es igual a 5 
 a es igual a 6 
 a es igual a 7 
Paso a paso; 
• el primer case (case 4) no se cumple, 
• se cumple el segundo e imprime "a es igual a 5" 
• no ve un break, así que ejecuta el interior del 
siguiente case, sin ni siquiera llegar a evaluarlo, 
por lo que imprime "a es igual a 6", 
• ídem con el siguiente case, que imprime 
 "a es igual a 7", 
• encuentra ahora si un break, y se sale del switch. 
$a = 5; 
switch ($a) { 
 case 4: 
 echo "a es igual a 4"; 
 case 5: 
 echo "a es igual a 5"; 
 case 6: 
 echo "a es igual a 6"; 
 case 7: 
 echo "a es igual a 7"; 
 break; 
}
break
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
2.- Bifurcaciones 9
๏ Se puede poner case sin contenido, y hacer así case combinados:Ejecución del anterior código: 
➡ Si b vale 0, se ejecuta el case 0, y luego el 1 y el 2, y el break 
➡ Si b vale 1, se ejecuta el case 1 y el 2 y el brea 
➡ Si b vale 2, se ejecuta el case del 2, y el break 
➡ Si b vale 3, se ejecuta el case del 3, y el break 
➡ y si no, se ejecuta el default
El uso de case combinados o vacíos
$b = 1; 
switch ($b) { 
 case 0: 
 case 1: 
 case 2: 
 echo " el valor de b es menor que 3"; 
 break; 
 case 3: 
 echo " el valor de b es igual a 3"; 
 break; 
 default: 
 echo " el valor de b es mayor que 3"; 
}
case vacíos
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
2.- Bifurcaciones
Temas avanzados : resultado de una asignación
- Estas lineas imprimen el valor 4, que es lo que se devuelve en la asignación : 
- En estas circunstancias, resulta que depende de como se haga la asignación, puede ser 
admitida por una instrucción if o no (si la operación devuelve un boolean, será admitida). 
Por ejemplo este if da TRUE (el resultado de la asignación) 
- Si se asignan valores numéricos, tampoco da error, pues para PHP todo lo que sea 0 es 
false, y cualquier otro valor es true 
Estas linea imprimen “a es igual que b” 
- Una actividad que suele confundir y se realiza bastante en programas avanzados es unir 
una comparación con una asignación, como en el caso de este ejemplo. 
En estos casos, es muy importante usar, y usar bien los paréntesis, para permitir mas 
legibilidad. En este caso, primero se hace una asignación, que devuelve el valor asignado, 
que a su vez es comparado con otro valor. En este caso, el if sí se cumple.
10 Instrucción switch (I)
$a = 6; $b = 64; 
echo $a = $b;
$a = false; $b = true; 
if ($a = $b) { 
 echo "a es igual que b"; 
}
$a = 3; $b = 4; 
if ($a = $b) { 
 echo "a es igual que b"; 
} else { 
 echo "a no es igual que b"; 
}
$a = 3; $b = 4; 
if (($a = $b) > 2) { 
 echo "Se cumple el if"; 
}
Temas avanzados : default desordenado en un switch
• Si se usa default, no tiene por qué ser la ultima opción del switch, detrás de todos los case. Puede colocarse en cualquier orden. El hecho de 
que se cumpla el default no impide que se ejecuten los demás case siguientes, si no hay un break. En realidad, default es como un case mas, 
cuyo valor es “cualquier valor que no esté en algún otro case” (incluidos los de detrás del propio default) 
• El problema del mal uso de == en las evaluaciones booleanas, cuando se usa un operador de asignación = en su lugar, es que no tiene por que dar 
error si se usa, y despista bastante 
• Una asignación (por ejemplo, $b=4) es en sí misma una operación …. que también devuelve un valor, exactamente, el valor asignado (4 en este 
caso)
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
3.- Bucles 1
 TEMARIO DE CURSO 
 PROGRAMACIÓN PHP 
 
 CAPÍTULO 3 
 BUCLES 
 
 © Iñaki Martín 
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
http://creativecommons.org/licenses/by-nc-nd/4.0/
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
3.- Bucles 2for / while : Resumen
WHILE 
$i=0; 
while ($i<10) { 
 print($i); 
 $i++; 
} 
FOR ANIDADOS
for ( $a=1; $a <=3 ; $a++) { 
 print("Vuelta “ . $a . " del bucle externo"); 
 for ( $b=1; $b <=3 ; $b++) { 
 print("Vuelta ". $b . " de bucle interno”); 
 } 
}
FOR 
for ($j = 0 ; $j < 10 ; $j++) { 
 print($j); 
} 
 WHILE contra FOR
$vc = 1; 
while ($vc <= 10) 
{ 
 print (“2 por " . $vc . ”es " + (2 * $vc)); 
 vc++; 
}
for ( $vc = 1; $vc <= 10 ; $vc++) 
{ 
 print (“2 por " . $vc . "es " + (2 * $vc)); 
}
DO-WHILE 
$a=0; 
do{ //asegura pasar a menos una vez 
 print($a); 
 $a++; 
}while($a<10);
FOR EACH (para arrays y arrays asociativos)
$arrayAsoc2 = array (34 => "Eva",67 => "Ana",71 => "Carmen" ); 
foreach ( $arrayAsoc2 as $cadaclave => $cadavalor ) { 
 echo $cadaclave . " - " . $cadavalor . "<br>"; 
}
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
3.- Bucles 3
๏ Cuando se necesita que un grupo de ordenes se repita varias veces, se puede hacer uso de las instrucciones 
de bucle para escribir una sola vez dichas ordenes, e indicar que se han de repetir. 
๏ La instrucción while repita las ordenes que están dentro de su bloque de llaves mientras que se dé por 
cierta una condición establecida. Este es el formato y un ejemplo: 
 while (condición) { 
 (instrucciones) 
 break; //opcional 
 continue; //opcional 
 } 
Veamos paso a paso lo que va haciendo el bucle del ejemplo: 
✤ La variable a toma valor 1 
✤ Se evalúa la condición del while. Da cierto (a es 1, que es menor que 4), y se entra en el bucle while y se 
ejecutan sus ordenes (se imprime "a vale 1" y luego se incrementa el valor de a, que ahora será 2) 
✤ Como se ha acabado el bloque, se vuelve a la primera linea del bloque (línea de la instrucción while). 
✤ Se evalúa la condición del while. Da cierto (a es 2, y es menor que 4), y se entra en el bucle while y se 
ejecutan sus ordenes (se imprime "a vale 2" y luego se incrementa el valor de a, que ahora será 3 
✤ Como se ha acabado el bloque, se vuelve a la primera linea del bloque (línea de la instrucción while). 
✤ Se evalúa la condición del while. Da cierto (a es 3, y es menor que 4), y se entra en el bucle while y se 
ejecutan sus ordenes (se imprime "a vale 3" y luego se incrementa el valor de a, que ahora será 4) 
✤ Como se ha acabado el bloque, se vuelve a la primera linea del bloque (línea de la instrucción while). 
✤ Se evalúa la condición del while. Da falso (a es 4, y 4 no es menor que 4), por lo que no se ejecuta el bucle 
y se continua por la línea siguiente al bloque while 
 Instrucción while (I)
$a = 1; 
while ($a < 4) { 
 print("el valor de a es " . $a . "<br>"); 
 $a ++; 
}
Bucles con While
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
3.- Bucles 4
๏ La estructura normal de un bucle while es la siguiente 
 int valordecontrol = 1; 
 while ( valordecontrol < 4 ) { 
 System.out.println(“el valor de a es ” + valordecontrol) ; 
 valordecontrol ++; 
 } 
 Instrucción while (II) 
Antes del bucle se define una variable de control, en este 
caso valordecontrol, y se inicializa con un valor de entrada
La condición del bucle hace una comprobación 
del estado de la variable de control
Dentro del bucle se realiza una 
actualización de la variable de 
control
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
3.- Bucles 5
๏ La condición ha de ser una expresión que de un resultado de tipo boolean (true o false) 
๏ Para interrumpir la ejecución del bucle de modo incondicional, se usa la instrucción 
break, que al ejecutarse abandona el bucle y continua por la línea siguiente al bloque while 
๏ La instrucción continue interrumpe la ejecución del resto del bloque del while, y lleva la ejecución 
nuevamente a la línea de cabecera, a volver a comenzar el bucle, y evaluando nuevamente la condición 
๏ Las llaves no son obligatorias si hay solo una instrucción, aunque son recomendables por claridad 
 Instrucción while (III) 
¡Cuidado!: Uno de los mayores peligros de un bucle es entrar en un llamado bucle infinito, esto es, 
un bucle que nunca acaba. Puede darse este caso si: 
• Que los elementos de la condición no cambien nunca, con lo que la condición siempre se cumple. 
 (p.e. si la condición es "$a<4", y el valor de $a es <4, pero a no se cambia nunca) 
• El valor de los elementos de la condición cambia, pero en "sentido" contrario al supuesto limite 
 que intenta cumplir la condición 
 (p.e. si la condición es "$a<4", y el valor de $a es<4, y el cambio de a es siempre decrecer) 
Consideraciones de uso de while
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
3.- Bucles 6
๏ La variable de control es el elemento que más veces habrá que analizar a la hora de decidir cómo 
queremos que funcione nuestro bucle. 
๏ En realidad, lo que hay que hacer a la hora de construir un bucle es pensar que éste va a ser "un grupo de 
comandos que se va a repetir n veces, pero que en cada vez, un elemento va a ser diferente, 
generalmente, la variable de control" 
๏ Realmente, este bucle 
$a = 1; 
while ($a < 4) { 
 print("el valor de a es " . $a . "<br>"); 
 $a ++; 
} 
no es más que todas estas líneas seguidas: 
 Instrucción while (IV)
print(“el valor de a es ” + $a) ; 
 $a++;
print(“el valor de a es ” + $a) ; 
$a ++;
print(“el valor de a es ” + $a) ; 
$a ++;
Primera repetición, donde 
$a valdrá 1 
y luego cambia 
Primera repetición, donde 
$a valdrá 2 
y luego cambia 
Primera repetición, donde 
$a valdrá 3 
y luego cambia 
$a = 1;
Esto no es el bucle en si, va antes del bucle 
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
3.- Bucles 7
Ejemplo con análisis: hacer un programa que muestre la tabla de multiplicar del 2. 
๏ Si pintamos en papel lo que queremos que se muestre, habrá de ser algo así: 
 2 por 1 es 2 
 2 por 2 es 4 
 2 por 3 es 6 
 .. (etc.) 
๏ Vemos que realmente se trata una línea muy parecida, que ser repite n veces, y en la que cambian solo dos 
cosas, así que vamos a escribir la linea que se repite y a lo que cambia lo llamaremos @@ y ##. 
๏ Por lo tanto esa es la línea que hay que repetir (meter en un bucle). Busquemos los elementos de un bucle while. 
 
๏ La variable de control la vamos a llamar vc, y vamos a empezar por darle un valor inicial que aun nosabemos 
(ponemos por ahora &&) y la condición del bucle aun no la sabemos tampoco (ponemos por ahora ???) y 
tampoco sabemos como va a cambiar la variable de control, así que ponemos en la condición por ahora $$$ 
Pasos para diseñar un bucle while (I)
Ejemplo de la ejecución del programa
primera versión del bucle
$vc = && ; 
while ( ??? ){ 
 print("2 por " . @@ . ”es “ . ## ); 
 $$$; 
}
 print( "2 por " . @@ . "es " . ## );
Ejemplo de pasos para diseñar un bucle
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
3.- Bucles 8
๏ Vemos que @@ en el ejemplo de ejecución del programa tiene los valores 1,2,3… Por lo tanto, si yo me imagino 
que en mi bucle la variable de control va a ir tomando esos mismos valores, se ha descubierto que: 
1. El primer valor de la variable de control es 1, por lo que && es 1 
2. El último valor de la variable de control debe ser 10, por lo que el limite ??? debe ser “mientras vc<=10” 
3. El valor de @@ es la propia variable de control, vc 
4. El cambio de valor de vc es incrementado de uno en uno, así que la sentencia de actualización ($$$) será vc++ 
Pasos para diseñar un bucle while (II)
segunda versión del bucle
$vc = 1; 
while ( $vc<10 ) { 
 print("2 por " . $vc . "es “ . ## ); 
 $vc++; 
}
primera versión del bucle
๏ Escribimos de nuevo la primera versión que anteriormente hemos deducido, para tenerla a la vista: 
$vc = && ; 
while ( ??? ){ 
 print("2 por " . @@ . ”es “ . ## ); 
 $$$; 
}
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
3.- Bucles 9
๏ Sólo nos queda ver cómo obtener el contenido de # . Si el necesitamos que salga esto: 
 2 por 1 es 2 
 2 por 2 es 4 
 2 por 3 es 6 
 .. (etc.) 
๏ ¿Cómo se puede obtener el valor deseado (marcado en rojo), sabiendo sólo los valores que (de fijo) va 
a ir tomando la variable de control (los que se marcan en azul). Podemos hacer una tabla de este tipo, 
muy útil en todos los análisis de bucles: 
๏ Vemos pues que si uso 2*vc, obtengo realmente lo que quiero sustituir por ## y que me vale para cada 
una de las vueltas que va a dar el bucle, con lo que tengo ya mi bucle completo: 
Pasos para diseñar un bucle while (III)
tercera y definitiva versión del bucle
valor que deseamos 
obtener ( ## ) 
valores que va a ir tomando la variable de 
control (vc)
como convertir la primera 
columna en la segunda
2 1 2 * vc
4 2 2 * vc
6 3 2 * vc
$vc = 1; 
while ( $vc<10 ) { 
 print("2 por " . $vc . "es “ . (2*$vc) ); 
 $vc++; 
}
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
3.- Bucles 10
๏ Una vez que tenemos la solución, vamos a “leer” la ejecución del programa, línea a línea, 
para analizar lo que hace más despacio: 
 
1. Se da valor 1 a vc 
2. Como vc es menor o igual que 10, entra en el bucle 
3. Con la instrucción System… imprime "2 por 1 es 2" (se ve claro sustituyendo vc por su valor actual, 1) 
4. Incrementa el valor de vc, que ahora vale 2 
5. Acaba el bucle, con lo que evalúa nuevamente la condición para ver si ha de entrar en el while otra vez 
6. Como vc es menor o igual que 10, (vc es 2) entra en el bucle otra vez 
7. Con la instrucción System… imprime "2 por 2 es 4" (se ve claro sustituyendo vc por su valor actual, 2) 
8. Incrementa el valor de vc, que ahora vale 3 
9. Acaba el bucle, con lo que evalúa nuevamente la condición para ver si ha de entrar en el while otra vez 
10. Como vc es menor o igual que 10, (vc es 3) entra en el bucle 
11. Con la instrucción System… imprime "2 por 3 es 6" (se ve claro sustituyendo vc por su valor actual, 1) 
12. Incrementa el valor de vc, que ahora vale 4 
13. …… 
14. y sigue repitiendo hasta que un incremento de vc le de un valor de 11, con lo que al acabar el bucle, 
15. al evaluar la condición como vc ya no es menor o igual que 10, no entra en el bucle y sigue 
Pasos para diseñar un bucle while (IV)
$vc = 1; 
while ( $vc<10 ) { 
 print("2 por " . $vc . "es “ . (2*$vc) ); 
 $vc++; 
}
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
3.- Bucles 11 do-while 
 Do - while
๏ Hay una variante de while que consiste en la instrucción do-while, con esta sintaxis y ejemplo: 
 
๏ Vemos que la condición de ejecutar el bucle ha pasado de ser la primera a ser la última línea del bucle 
๏ La diferencia con el while anterior está en que 
➡ en un while se evalúa siempre la condición para entrar, incluso la primera vez que se llega al bucle, por 
lo que puede que no se entre en el bucle ni una sola vez 
➡ en un do-while la evaluación de la condición se hace al final del bucle, por lo que la primera vez el bucle 
se ejecutará siempre, y solo se pueden discriminar subsiguientes ejecuciones del bucle. 
๏ Se garantiza pues, con un do-while, que el bucle se ejecuta al menos una vez. 
๏ Por lo demás todas las consideraciones del while se aplican al do-while 
// do { 
// (instrucciones) 
// } while (condición) 
$a=1; 
do { 
 print("el valor de a es " . a) ; 
 $a++; 
}while ( $a < 4);
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
3.- Bucles 12 Instrucción for (I)
๏ La instrucción for permite ejecutar bucles de un modo muy similar a while, con otra sintaxis. Realmente podemos 
ver como lo que hace es recolocar los elementos del bucle while en otra estructura, veamos la comparación: 
 for (inicialización; comprobación; actualización) { 
 (instrucciones) 
 break; //opcional 
 continue; //opcional 
 } 
 inicialización 
 while ( comprobación ) { for ( inicialización ; comprobación ; actualización ) { 
 instrucciones instrucciones 
 …. …. 
 actualización } 
 } 
๏ El ejemplo anterior de la tabla del 2 con un while y un for comparados:
$vc = 1; 
while ($vc <= 10) 
{ 
 print("2 por " . $vc . "es " . (2 * vc)); 
 $vc++; 
}
for ( $vc = 1; &vc <= 10 ; $vc++) 
{ 
 print("2por " . $vc . "es " . (2 * vc)); 
}
For
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
3.- Bucles 13
๏ La condición ha de ser una expresión que de un resultado de tipo boolean (true o false) 
๏ La condición se evalúa ANTES de la primera ejecución de un for, por lo que puede que no se cumpla y no se 
entre ni una sola vez al bucle 
๏ Al contrario que en otros lenguajes, la variable creada como índice del for SI es accesible fuera del for. 
๏ Se puede usar break y continue del mismo modo que se usaban en while. En el caso de continue, en un 
while dirige la acción a la condición del bucle, en el caso de un for, lo envía a la instrucción de actualización.
 Instrucción for (II) 
for ($i = 0; $i < 4; $i ++) { 
 echo $i; 
} 
echo $i; // Sin problemas, imprime 4
Consideraciones de uso de for
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
3.- Bucles
Temas avanzados : Parámetros de un for
14
๏ El cambio de valor en la actualización de la variable de control puede ser cualquiera, tanto en for 
como en while, no necesariamente incrementando de 1 en 1. 
๏ Este bucle va cambiando la variable de 2 en 2 y decreciendo desde 20 hasta 0. 
๏ Atención al cambio que se ha de hacer en la condición : 
๏ Y este bucle cambia de 5 en 5 desde 0 hasta 100 :
 Instrucción for (III) Incremento variable
for (i$vc=0 ; $vc <=100 ; $vc=$vc+5) { 
 print( $vc ); 
}
for ($vc=20 ; $vc >=0 ; $vc = $vc - 2 ) { 
 print( $vc ); 
}
Incremento variable
• No son obligatorios ninguno de los elementos de la cabecera de un for. Por ejemplo: 
es una instrucción totalmente valida, crea además un bucle infinito salvo que 
usemos una salida forzada dentro del bucle. 
• Opcionalmente, usando una coma como separador, se pueden añadir más de una 
instrucción en la inicialización y la actualización de una instrucción for:
for($a = 1, $b = 12; $a < 12; $a ++, $b ++) { 
 … 
}
for( ; ; ) 
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
3.- Bucles 15For each
For-each para recorrer un array asociativo o indexado
๏ Un array asociativo no puede recorrerse con un for normal, pues las claves pueden no ser numéricas. Hay que usar 
un foreach (que también se puede usar en arrays normales u otras colecciones) 
๏ Un foreach normal (en colecciones indexadas, no asociativas) tiene esta estructura:
$arrayAsoc2 = array (34 => "Eva",67 => "Ana",71 => "Carmen" ); 
foreach ( $arrayAsoc2 as $cadaclave => $cadavalor ) { 
 echo $cadaclave . " - " . $cadavalor . "<br>"; 
}
๏ Viene a hacer algo así como “Coge la colección puesta antes de la palabra as, y para cada vuelta del bucle, vas 
sacando un elemento y lo metes en la variable que se declara a la derecha de la palabra as” 
๏ Así pues, unaVariable va pasando por cada uno de los elementos del array o de la colección que sea. 
Salida
34 - Eva 
67 - Ana 
71 - Carmen
foreach ( coleccionARecorrer as unaVariable ) { 
 ……. 
}
foreach ( coleccionARecorrer as varClave => varValor ) { 
 ……. 
}
// un array indexado 
$miarray = array (“Ana","Eva","Luis" ); 
for($k = 0; $k < 4; $k ++) { // recorrido con for normal 
 print ($miarray [$k] . "<br>") ; 
} 
foreach($miarray as $cadavalor ) { // recorrido con foreach 
 print ($cadavalor . "<br>") ; 
}
๏ También se puede usar foreach con un array asociativo, de este formato:
๏ Así se recorre un 
array indexado, 
tanto con un for 
normal como un 
for-each
Salida
Ana 
Eva 
Luis
๏ Los arrays se ven en el capítulo siguiente, pero adelantamos el modelo del for-each como un for especial para recorrerlos.
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
3.- Bucles
 
 for ( $a=1; $a <=3 ; $a++) { 
 print("Comienza la vuelta “ . $a . " del bucle externo" ); 
 for ( $b=1; $b <=3 ; $b++) { 
 print("--Vuelta “ . $b . ” del bucle interno donde el externo esta la vuelta”+ $a ); 
 } 
 } 
16
๏ Se puede incluir un bucle dentro de otro bucle. El bucle interno se repite por lo tanto tantas veces como 
indique el bucle externo. Esto es especialmente útil en el tratamiento de matrices (ver más adelante) 
๏ Ver este código y la ejecución que resulta: 
๏ Resultado de la ejecución: 
Comienza la vuelta 1 del bucle externo 
--Vuelta 1 del bucle interno donde el externo esta la vuelta 1 
--Vuelta 2 del bucle interno donde el externo esta la vuelta 1 
--Vuelta 3 del bucle interno donde el externo esta la vuelta 1 
Comienza la vuelta 2 del bucle externo 
--Vuelta 1 del bucle interno donde el externo esta la vuelta 2 
--Vuelta 2 del bucle interno donde el externo esta la vuelta 2 
--Vuelta 3 del bucle interno donde el externo esta la vuelta 2 
Comienza la vuelta 3 del bucle externo 
--Vuelta 1 del bucle interno donde el externo esta la vuelta 3 
--Vuelta 2 del bucle interno donde el externo esta la vuelta 3 
--Vuelta 3 del bucle interno donde el externo esta la vuelta 3
Bucles anidados 
Bucle anidados
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
4.- Arrays (vectores) 1
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional.
 TEMARIO DE CURSO 
 PROGRAMACIÓN PHP 
 
 CAPÍTULO 4 
 ARRAYS 
 
 © Iñaki Martín 
http://creativecommons.org/licenses/by-nc-nd/4.0/
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
4.- Arrays (vectores) 2
๏ Son arrays con un índice, idénticos a los arrays normales de otros lenguajes como java o C 
๏ Para distinguir entre todos los valores del array (del “tren”), se le pone un "apellido" al nombre de la variable, que es un 
numero, de modo que cada número identifica a cada uno de los diferentes valores de la variable.
Array, concepto
$miVariableA[0] = 12; // $miVariable es el tren, miVariable[0] el primer vagón, que almacena el numero 12; 
$miVariableA[1] = 422; // $miVariable es el tren, miVariable[1] el segundo vagón, que almacena el numero 422; 
$miVariableA[2] = 78; // $miVariable es el tren, miVariable[2] el tercer vagón, que almacena el numero 78;
12 42
2
78 38
1
El array es el tren, los elementos del array son cada uno de los 
vagones, que tienen un índice (numero de vagón) y un contenido
๏ Una idea más conceptual para entender los arrays (o arrays) es imaginar al 
array como un tren, que tiene vagones numerados, y que dentro de cada 
vagón, se almacena un contenido. 
๏ Al respecto de este índice, decir que: 
‣ para identificar cada “vagón”, se usa el nombre del tren, añadido, el valor del índice entre [ ] 
‣ los índices son números enteros, positivos y correlativos 
๏ Por lo tanto, si quisiéramos que la variable anterior tuviera 3 valores diferentes, podría hacerse escribiendo así:
Concepto de array 
Arrays indexados
๏ Hasta ahora, al crear variables de algún tipo, en la variable solo se podía guardar un único valor. 
๏ Un Array (Vector en castellano) es casi una variable normal, solo que en vez de tener un solo valor, tiene varios. 
Permite almacenar, con un solo nombre, muchos valores. 
๏ Existen en PHP arrays unidimensionales ( indexados o asociativos) y multidimensionales. 
Veamos primero los dos unidimensionales
Son muy similares a los arrays tradicionales de C o Java
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
4.- Arrays (vectores) 3
๏ Para crear un array indexado, hay que usar la función array(). Ejemplo: 
๏ En PHP, a diferencia de otros lenguajes, los arrays no son inmutables, esto es, no tienen un tamaño inicialmente 
definido. Y el tamaño de un array puede variar sin tener que destruirlo y recrearlo 
๏ Los valores que tiene un array se pueden modificar,simplemente asignándoles un nuevo valor, igual que a cualquier 
otra variable. Entre los corchetes, se pone el índice del elemento a tratar (el número del vagón del tren): 
๏ Siguiendo con el ejemplo del tren, el resumen de lo que se ha dicho hasta ahora sería: 
 
Crear un array
$miarray1 = array(); // array vacío, no tiene contenido 
$miarray2 = array(4, 8, 231, 5, 4); // array con 5 elementos, todos números enteros 
$miarray3 = array("Ana", "Pepe", "Eva"); // array con 3 elementos, todos cadenas
$miarray2[1] = 23; //cambiamos el valor del elemento 1 del array 
$miarray2[2] = 17; //cambiamos el valor del elemento 2 del array 
$miarray2 -> es el TREN COMPLETO 
$miarray2[2] -> es UN VAGON del tren, y el numero 2 es el INDICE del array (el número de vagón)
๏ Los elementos de un array se comportan como si fueran una variable normal del tipo elegido. 
Esto es, un elemento de un array de int, se comporta como una variable int normal: se puede sumar, asignar… 
print("Valor 0 del array miarray2 es " . $miarray2[0]); // imprimir por pantalla 
print($miarray2[1]); // imprimir por pantalla 
$numeroElegido = $miarray2[2]; // asignar a una variable 
$numeroduplicado = $miarray2[2] * 2; // operar con el elemento
Cuidado. Los índices del array comienzan numerandose desde 0, asi que el 
array $miarray2 tiene un tamaño de 5, pero los índices van del 0 al 4
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
4.- Arrays (vectores)
๏ Son arrays que también tienen un índice, pero en este caso, el índice no es numérico ni secuencial, sino que se 
específica por el usuario. Al índice se le suele llamar clave, y al contenido del elemento, valor. 
๏ Para crear un array asociativo, se ha de indicar en la creación tanto la clave como el valor, separados por =>
๏ En este caso, en la idea conceptual de entender el array como un tren, también 
tiene vagones etiquetados, solo que la etiquetas que identifica a cada vagón se 
proporciona por el usuario, no es numérica y secuencial 
๏ Para acceder a los elementos del array, se indica entre los corchetes el valor real de 
la clave que identifica a cada vagón:
$arrayAsoc = array ("portero" => "Eva" , "Defensa" => “Ana" );
4Arrays asociativos
echo $arrayAsoc ["portero"]; // escribirá Eva 
echo $arrayAsoc ["defensa"]; // escribirá Ana 
echo $arrayAsoc ["Defensa"]; // DA ERROR, pues la clave es “defensa”, no “Defensa”
๏ La clave de un array asociativo puede ser un número o una cadena:
echo $arrayAsoc ["portero"]; // escribirá Eva 
echo $arrayAsoc ["defensa"]; // escribirá Ana 
echo $arrayAsoc ["Defensa"]; // DA ERROR, pues la clave es “defensa”, no “Defensa”
$arrayAsoc1 = array ("portero" => "Eva","defensa" => "Ana" ); 
$arrayAsoc2 = array ( 34 => "Eva" , 67 => "Ana" );
En realidad, en PHP todos son arrays asociativos, pues los que llamamos indexados, en el fondo tienen como clave 
un índice numérico. Si al añadir elementos no identificamos una clave, PHP añade automáticamente una clave 
numérica, con lo que parece que no llevan clave asociativa pero sí la tienen
Arrays asociativos Son muy similares a los mapas de Java o diccionarios de Javascript o Python 
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
4.- Arrays (vectores) 5
‣ Usando array_push( array, contenido) 
Añade el elemento contenido al final del array array. contenido pueden ser varios elementos separados por 
comas. Los nuevos elementos se añaden con nuevos índices
Añadir elemento a un array
$frutas = array ("naranja","pera" ); 
$frutas [5] = "melon"; 
print_r ( $frutas ); // -> Array ( [0] => naranja [1] => pera [5] => melon )
$frutas = array ("naranja","pera" ); 
array_push ( $frutas, "melon", "sandia" ); 
print_r ( $frutas ); // -> Array ( [0] => naranja [1] => pera [2] => melon [3] => sandia )
$frutas = array ("naranja","pera" ); 
$frutas [] = "melon"; 
print_r ( $frutas ); // -> Array ( [0] => naranja [1] => pera [2] => melon )
 Añadir elementos a un array
‣ Asignando un elemento a una posición vacía del array ( $array[] ). 
Normalmente, si se asigna un valor a una posición (índice) de un array, se sustituye el valor. Pero si no se le 
indica posición (se indican solo los corchetes vacíos), PHP añade el elemento al final ;
‣ Siguiendo con la lógica de usar índices, si yo añado un elemento a un array con un indice que no existe, crea 
el elemento en la posición que haya dicho (recordar que los arrays indexados son realmente …. asociativos)
añadir en un array indexado
añadir en un array asociativo
$arrayAsoc = array ('portero' => 'Eva' , "Defensa" => 'Ana' ); 
$arrayAsoc['delantero'] = 'Carmen'; 
print_r ( $arrayAsoc ); // -> Array ( [portero] => Eva [Defensa] => Ana [delantero] => Carmen )
‣ Dos modos: se crea un nuevo elemento simplemente asignando un valor a una nueva clave
$arrayAsoc = array ('portero' => 'Eva' , "Defensa" => 'Ana' ); 
$arrayAsoc += ['delantero' => 'Carmen']; 
print_r ( $arrayAsoc ); // -> Array ( [portero] => Eva [Defensa] => Ana [delantero] => Carmen )
‣ o añadiendo un elemento creado como un "array" (entre corchetes):
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
4.- Arrays (vectores) 6
‣ Eliminando el elemento a través del INDICE 
Usando unset() , indicando el array con el indice que se desea eliminar:
 Eliminar elementos de un array
$my_array = array ('Luis','Ana','Pepa','Jorge' ); 
$my_array2 = array_diff ( $my_array, array ('Pepa' ) ); 
print_r ( $my_array ); // Array ( [0] => Luis [1] => Ana [2] => Pepa [3] => Jorge ) 
echo sizeof ( $my_array ); // 4 
print_r ( $my_array2 ); // Array ( [0] => Luis [1] => Ana [3] => Jorge ) 
echo sizeof ( $my_array2 ); // 3
๏ Hay varias maneras de eliminar elementos a un array ya creado:
// eliminar elementos 
$mi_array = array ('Luis','Ana','Pepa','Jorge' ); 
print_r ( $mi_array ); // Array ( [0] => Luis [1] => Ana [2] => Pepa [3] => Jorge ) 
unset ( $mi_array [2] ); 
print_r ( $mi_array ); // Array ( [0] => Luis [1] => Ana [3] => Jorge ) 
// CUIDADO no vale indicar el VALOR como índice, pues en indexados el indice es númerico !! 
unset ( $mi_array ['Luis'] );
 Eliminar elementos de un array
$arrayAsoc1 = array ("portero" => "Eva","defensa" => "Ana","delantero" => "Julia" ); 
print_r ( $arrayAsoc1 ); // Array ( [portero] => Eva [defensa] => Ana [delantero] => Julia ) 
unset ( $arrayAsoc1 ["defensa"] ); 
print_r ( $arrayAsoc1 ); // Array ( [portero] => Ana [delantero] => Julia )
eliminar con unset() en un array indexado
‣ Eliminando el elemento a través del VALOR 
Usando array_diff , definiendo en primer lugar el array completo y en segundo un array con los elementos a eliminar: 
eliminar con unset() en un array asociativo
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
4.- Arrays (vectores) 7
๏ Modificando el valor de dicha variable (por ejemplo, mediante un bucle), podemos ir accediendo a cada 
elemento del array, “recorriendo” los valores (los vagones del tren) 
๏ Por ejemplo, si deseo imprimir todos los elementos de un array, seguidos, podría hacerse así: 
 Recorrer un array
$miarray = array ("Ana","Pepe","Eva","Luis" ); 
for($k = 0; $k < 4; $k ++) { 
 print( $miarray[$k] ) ; 
}
$miarray = array ("Ana","Pepe","Eva","Luis" ); 
print ($miarray [0]) ; 
print ($miarray [1]) ; 
print ($miarray [2]) ; 
print ($miarray [3]) ;
๏ Veamos las líneas anteriores más despacio. 
✴ en el bucle, en su primera línea, se crea una variable llamada $k, y comienza teniendo valor 0 
✴ lo que haya dentro del for se repetirá mientras sea cierto que $k<5 
✴ el valor de $k se irá incrementando en cada vuelta del bucle de uno en uno. 
Por lo tanto, $k va a valer, sucesivamente, 0,1,2,3 ….. que son cada unode los indices que usábamos para escribir 
inicialmente el array… al escribir el elemento que tenga ese indice, escribiremos todo el array.
๏ Cuando se trabaja a con arrays, una acción habitual es recorrer todos los elementos del array, para comprobar sus 
valores, cambiarlos, exponerlos, o cientos de cosas mas. Para ello usamos una de las propiedades más interesantes de 
los arrays, la posibilidad de emplear una variable para indicar el índice del elemento. 
 Recorrer un array
๏ Si nos fijamos, es realmente una misma línea que se repite 
y que es casi igual en todos los casos... esto huele a bucle. 
En este caso lo que varia es un solo numero, y que además, 
va tomando sucesivamente los valores 0,1,2,3,4…. vamos, 
lo mismo que ocurre con el índice de un bucle for… Así 
pues, las 5 líneas anteriores se podrían haber resumido en :
For normal para recorrer un array indexado
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
4.- Arrays (vectores) 8
1. la variable $k se pone inicialmente con valor 0 
2. se entra en el bucle, pues la condición inicial se cumple, pues $k <4, ($k ahora es 0) 
3. se ejecuta la línea del print…, que intenta hacer 
 print( $miarray[$k] ) 
 pero como $k=0, realmente hace 
 print( $miarray[0] ) 
 e imprime "Ana" 
4. el bucle acaba, con lo que se incrementa el valor de $k, que pasa a ser 1 
5. se entra nuevamente en el bucle, pues la condición se cumple, pues se mira si $k<4, y $k es 1 
6. se ejecuta la línea del print..., que intenta hacer 
 print( $miarray[$k] ); 
 pero como $k=1, realmente hace 
 print( $miarray[1] ) 
 imprime "Pepe" 
7. el bucle acaba, con lo que se incrementa el valor de $k, que pasa a ser 2 
8. …. y todo se repite nuevamente, 
 y se van imprimiendo los nombres de todos los elementos del array, con solo una línea, 
¿cuando acaba el bucle? cuando no se cumpla $k<4, que ocurrirá por vez primera cuando $k=4, 
 así que $k habrá valido desde 0 hasta 3, que son realmente todos los elementos del array
$miarray = array ("Ana","Pepe","Eva","Luis" ); 
for($k = 0; $k < 4; $k ++) { 
 print( $miarray[$k] ) ; 
}
Detalle paso a paso de la ejecución del bucle anterior
 Recorrer un array
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
4.- Arrays (vectores) 9
๏ Un array asociativo no puede recorrerse con un for normal, pues las claves pueden no ser numéricas. Hay que usar 
un foreach (que también se puede usar en arrays normales u otras colecciones) 
๏ Un foreach normal (en colecciones indexadas, no asociativas) tiene esta estructura:
$arrayAsoc2 = array (34 => "Eva",67 => "Ana",71 => "Carmen" ); 
foreach ( $arrayAsoc2 as $cadaclave => $cadavalor ) { 
 echo $cadaclave . " - " . $cadavalor . "<br>"; 
}
๏ Viene a hacer algo así como “Coge la colección puesta antes de la palabra as, y para cada vuelta del bucle, vas 
sacando un elemento y lo metes en la variable que se declara a la derecha de la palabra as” 
๏ Así pues, unaVariable va pasando por cada uno de los elementos del array o de la colección que sea. 
Salida
34 - Eva 
67 - Ana 
71 - Carmen
For-each para recorrer un array asociativo o indexado
foreach ( coleccionARecorrer as unaVariable ) { 
 ……. 
}
foreach ( coleccionARecorrer as varClave => varValor ) { 
 ……. 
}
// un array indexado 
$miarray = array (“Ana","Eva","Luis" ); 
for($k = 0; $k < 4; $k ++) { // recorrido con for normal 
 print ($miarray [$k] . "<br>") ; 
} 
foreach($miarray as $cadavalor ) { // recorrido con foreach 
 print ($cadavalor . "<br>") ; 
}
๏ También se puede usar foreach con un array asociativo, de este formato:
๏ Así se recorre un 
array indexado, 
tanto con un for 
normal como un 
for-each
Salida
Ana 
Eva 
Luis
 Recorrer un array
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
4.- Arrays (vectores) 10
๏Desde la version 5.4 de PHP se permite evitar la función array() y crear arrays usando corchetes:
Características de los arrays
$miarray4 = [ "Ana","Pepe","Eva","Luis" ]; // array con 4 elementos, todos cadenas
๏Un foreach usa copias de los elementos del array, no los propios elementos del array. 
Por lo tanto, si se desea modificar los elementos del array dentro del foreach, hay que decirle que use 
realmente los elementos, no las copias, y eso se hace añadiendo & antes de la declaración de la variable:
$miarray = array ("Ana","Eva","Luis" ); 
foreach ( $miarray as $cadavalor ) { 
 $cadavalor = "--" . $cadavalor; 
 print ($cadavalor . "<br>") ; 
} 
foreach ( $miarray as &$cadavalor ) { 
 $cadavalor = "--" . $cadavalor; 
 print ($cadavalor . "<br>") ; 
}
En el primer caso, aunque se intenta 
modificar el array, no se modifica
Ahora si, añadiendo & antes de la 
variable, esta se lee por referencia y 
se puede modificar
Salida
Ana 
Eva 
Luis
Salida
--Ana 
--Eva 
--Luis
$miarray = array ("Ana","Eva","Luis" ); 
var_dump ( $miarray );
Salida
array(3) { [0]=> string(3) "Ana" [1]=> string(3) "Eva" [2]=> string(4) "Luis" }
En realidad lo que se hace así es usar el array por referencia, no por valor como es normalmente 
Características de los arrays
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
4.- Arrays (vectores)
DEVUELVE Función Descripción
int
count( array ) 
sizeOf( array )
Cuentan todos los elementos de un array o algo de un objeto
array
array_diff(arr1, arr2,…) Compara dos o mas arrays (pasados por parámetro) y devuelve un array con los 
elementos que no están en todos los arrays analizados
array
array_fill( indice, cuantos, valor) Crea un array nuevo, rellenando con un valor inicial 
indice es el primer índice del array que crea (crea array asociativo con indice numérico) 
cuantos es el numero de elementos que crea en el array 
valor es el valor con el que se rellena el array 
array
array_key_exists(clave, array ) Devuelve TRUE si la clave indicada existe en el array, si no, no devuelve nada. 
La diferencia con isset() es que array_key_exists devuelve true si existe una clave en un 
array, mientras que isset devuelve true si la clave/variable existe y además no es null .
array
in_array(clave, array ) Devuelve TRUE si el valor indicado existe en el array, si no, no devuelve nada
11
๏ Existen numerosas funciones para trabajar con arrays, exponemos las mas importantes con ejemplos, el resto solo con 
su descripción
Funciones para manejar arrays
$a1 = array_fill ( 2, 3, "leon" ); 
$b1 = array_fill ( 0, 3, "mono" );
Valores
Array ( [2] => leon [3] => leon [4] => leon ) 
Array ( [0] => mono [1] => mono [2] => mono )
$tam = count( $miarray );
Funciones para manejar arrays
$entrada = array ('N' => 'Norte' , "S" => 'Sur' ); 
$existe = array_key_exists( 'N' , $entrada); 
echo($existe); // 1 (esto es, TRUE)
$entrada = array ('N' => 'Norte' , "S" => 'Sur' ); 
$existe = in_array( 'Norte' , $entrada); 
echo($existe); // 1 (esto es, TRUE)
T
e
m
a
ri
o
 d
e
 c
u
rs
o
 
P
H
P
 
 
 
 
 
 ©
 
 
 
 
 
 I
ñ
a
k
i 
M
a
rt
ín
 
4.- Arrays (vectores)
DEVUELVE Función Descripción
array
array_slice( arr , desde, 
cuanto, reorder ) 
Extrae una parte de un array. Devuelve un nuevo array con un grupo de sus elementos. 
arr: El array que se procesa. 
desde: Posición desde donde se comienzan a coger elementos, contando desde el principio. 
Si es un número positivo, se cuenta desde el inicio del array, si es negativo, se cuenta desde 
el final hacia atrás. 
cuanto: Si es un numero positivo, se cogen tantos elementos como indique el valor. 
Si es negativo, la secuencia finalizará en tantos elementos empezando por el final del array. 
Si se omite, entonces se toman todos los elementos hasta el final del array. 
recorder: IPor defecto, este método reordena y reinicializa los índices numéricos del array 
nuevo que

Continuar navegando

Materiales relacionados

560 pag.
curso-de-programacion-cc---fco-javier-ceballos

Escola Municipal Getulio Vargas

User badge image

Alicia Castillo

78 pag.
GD2 - PHP

SIN SIGLA

User badge image

Yolibett Mendoza

153 pag.
Introduccion-prog--C

IPN

User badge image

Todos los Materiales

162 pag.
Perl-Basic-o-Desde-Cero

Albert Einstein

User badge image

FREDY PICHIHUA