Si tienes cinco notas, podrías crear $nota1, $nota2… $nota5. Pero si son
cuarenta, o si no sabes cuántas serán, eso no escala. Un arreglo guarda muchos
valores bajo un solo nombre. Hay dos formas de ubicar cada valor: por su
posición (0, 1, 2…) o por una clave con nombre ("nombre", "precio").
PHP Warning: Undefined array key 3 in /home/ana/prueba.php on line 3
Tres elementos ocupan las posiciones 0, 1 y 2. La posición 3 no existe.
Arreglos con claves
En $persona[2], el número no dice nada: ¿qué había en la posición 2? Un arreglo
asociativo usa nombres en vez de números. Es la forma de guardar un
registro: todos los datos de una persona o de un producto.
La clave (a la izquierda de =>) es un texto entre comillas.
El valor (a la derecha) puede ser de cualquier tipo.
Asignar a una clave la cambia si existe, y la crea si no existe.
Ya conoces uno: los datos de un formulario
Cuando se envía un formulario con los campos nombre y correo, PHP recibe un
arreglo asociativo con esas claves: $_POST["nombre"] y $_POST["correo"]. Se ve
en la Parte 6.
isset() responde true o false. ?? es el mismo de la
Parte 3: da un valor por
defecto si la clave no está.
Recorrer: foreach
foreach pasa por cada elemento del arreglo, de principio a fin, y en cada vuelta
deja el valor en una variable. No hay que manejar posiciones ni count().
Anatomía de un foreach
foreach ($notas as $nota) {
---+-- --+--
| `- en cada vuelta, el elemento actual (en singular)
`---------- el arreglo que se recorre (en plural)
echo $nota;
}
En el navegador, envuélvelo en <pre> para que conserve los saltos de línea:
<pre><?php print_r($producto); ?></pre>. Es para buscar errores; en la página
terminada no queda ninguno.
Pruébalo
Crea un arreglo con cinco notas, imprime la primera y la última
Agrega una sexta nota con [] y comprueba que count() cambió
Calcula el promedio recorriendo con foreach
Crea un arreglo asociativo con tus datos (nombre, carrera, ciudad) y recórrelo con $clave => $valor
Error provocado: lee una clave que no existe, con y sin ??
Error provocado: haz echo de un arreglo completo y lee el Warning
Errores comunes
Síntoma
Causa
Solución
Undefined array key 5
Pediste una posición que no existe (la última es count - 1)
Recorre con foreach, o revisa el índice
Undefined array key "stock"
La clave no existe, o está escrita distinto ("Stock")
Revisa con print_r; usa isset o ??
Undefined constant "nombre"
La clave se escribió sin comillas: $p[nombre]
$p["nombre"]
Array to string conversion y se imprime Array
echo de un arreglo completo
print_r() para revisar, foreach para mostrar
foreach() argument must be of type array|object
La variable que recorres no es un arreglo (o no existe)
Revisa con var_dump() qué tiene
Checkpoint
Intenta responder antes de desplegar cada pregunta.
En $letras = ["a", "b", "c", "d"];, ¿qué es $letras[2] y cuál es la última posición?
$letras[2] es "c", porque se cuenta desde 0. La última posición es 3
(count($letras) - 1).
¿Qué ventaja tiene $producto["precio"] sobre $producto[1]?
Que se entiende sin mirar cómo se creó el arreglo. Y si cambia el orden de los
datos, la clave sigue funcionando; la posición no.
¿Por qué foreach es mejor que for para recorrer un arreglo?
Porque pasa por todos los elementos sin que tengas que saber cuántos son. Si el
arreglo crece o se achica, el foreach sigue funcionando.
¿Qué devuelve isset($p["stock"]) si $p["stock"] vale 0?
true: la clave existe y su valor no es null. isset no pregunta si el valor es
“verdadero”, solo si está.