Definir los elementos de una matriz
En PHP disponemos de dos tipos de matrices, matrices de índice numérico y matrices asociativas, según el índice de los elementos sea un número o una clave.
- Matrices de índice numérico
Podemos definir los elementos de una matriz usando índices numéricos:
<?php $ciudad[1] = "Madrid"; $ciudad[2] = "Caracas"; $i = 2; echo '$ciudad['.$i."] = ".$ciudad[$i]; // mostrara "$ciudad[2] = Caracas" ?>
Si no especificamos el índice comenzará desde 0:
<?php $ciudad[] = "Madrid"; // elemento indice 0 $ciudad[] = "Caracas"; // elemento indice 1 $ciudad[] = "Roma"; $ciudad[] = "Sevilla"; $ciudad[] = "Londres"; $i = 1; echo '$ciudad['.$i."] = ".$ciudad[$i]; // mostrara "$ciudad[1] = Caracas" ?>
También se pueden definir los elementos utilizando la función array (comenzará desde 0):
<?php $ciudad = array("Madrid", "Caracas", "Roma", "Sevilla", "Londres"); $i = 1; echo '$ciudad['.$i."] = ".$ciudad[$i]; // mostrara "$ciudad[1] = Caracas" ?>
Si cada elemento de una matriz es a su vez otra matriz hablamos de matrices multidimensionales:
<?php $calendario[] = array (1, "enero", 31); $calendario[] = array (2, "febrero", 28); $calendario[] = array (3, "marzo", 31); $calendario[] = array (4, "abril", 30); $calendario[] = array (5, "mayo", 31); $i = 1; $cadena = '$calendario['.$i."]: "; $cadena .= $calendario[$i][1]; $cadena .= " es el mes ".$calendario[$i][0]; $cadena .= " y tiene ".$calendario[$i][2]." dias"; echo $cadena; // mostrara "$calendario[1]: febrero es el mes 2 y tiene 28 dias" ?>
Las matrices multidimensionales también se pueden definir elemento a elemento:
<?php $a[0][0] = "a"; $a[0][1] = "b"; $a[1][0] = "y"; $a[1][1] = "z"; $i = 1; $j = 1; echo '$a['.$i."][".$j."] = ".$a[$i][$j]; // mostrara "$a[1][1] = z" ?>
- Matrices asociativas
En PHP los índices de los elementos de una matriz no tienen que ser números necesariamente. En las matrices asociativas a cada elemento, en vez de índice numérico, se le asigna una clave (key) que tendremos que especificar al definir los elementos de la matriz.
<?php $visitas["lunes"] = 200; $visitas["martes"] = 186; ?>
La sintaxis más utilizada para definir matrices asociativas utiliza la función array:
<?php $visitas = array("lunes"=>200, "martes"=>186); ?>
Para desplazarnos por los elementos de una matriz asociativa disponemos de una serie de funciones que actúan sobre el puntero interno que indica la posición:
- current: devuelve el valor actual del puntero.
- reset: mueve el puntero al primer elemento.
- end: mueve el puntero al último elemento.
- next: mueve el puntero al elemento siguiente.
- prev: mueve el puntero al elemento anterior.
- count: devuelve el número de elementos.
Veamos un ejemplo:
<?php $semana = array("lunes", "martes", "miercoles", "jueves", "viernes", "sabado", "domingo"); echo count($semana); // mostrara 7 reset($semana); //situamos el puntero en el primer elemento echo current($semana); // mostrara lunes next($semana); // martes end($semana); // domingo prev($semana); // sabado ?>
Recorrer los elementos de una matriz
Para recorrer los elementos de una matriz tenemos varias opciones.
- Usando contadores + for
Con un contador y un bucle for podemos recorrer los elementos de una matriz de índice numérico:
<?php $ciudad = array("Madrid", "Caracas", "Roma", "Sevilla", "Londres"); $num_elementos = count($ciudad); // numero de elementos for ($i=0; $i < $num_elementos; $i++) { echo '$a['.$i."] = ".$ciudad[$i]."<br />"; } ?>
Las matrices multidimensionales también se pueden recorrer utilizando contadores:
<?php $a[0][0] = "a"; $a[0][1] = "b"; $a[1][0] = "y"; $a[1][1] = "z"; for ($i = 0; $i <= 1; $i++) { for ($j = 0; $j <= 1; $j++) { echo '$a['.$i."][".$j."] = ".$a[$i][$j]."<br />"; } } ?>
- Usando while + list + each
Con un bucle while y las funciones each y list podemos recorrer los elementos de una matriz de índice numérico:
<?php $a = array("one", "two", "three"); reset ($a); while (list($index, $value) = each ($a)) { echo '$a['.$index."] = ".$value."<br />"; } ?>
También podemos recorrer los elementos de una matriz asociativa:
<?php $visitas = array("lunes"=>200, "martes"=>186, "miercoles"=>190); reset($visitas); while (list($key, $value) = each($visitas)) { echo '$visitas['.$key."] = ".$value."<br />"; } ?>
Igualmente, podemos recorrer los elementos de una matriz multidimensional:
<?php $calendario[] = array (1, "enero", 31); $calendario[] = array (2, "febrero", 28); $calendario[] = array (3, "marzo", 31); $calendario[] = array (4, "abril", 30); $calendario[] = array (5, "mayo", 31); while (list($index, $value ) = each($calendario)){ $cadena = '$calendario['.$index."]: "; $cadena .= $value[1]." es el mes numero ".$value[0]; $cadena .= " y tiene ".$value[2]." dias<br />"; echo $cadena; } ?>
- Usando foreach
El bucle foreach nos permite recorrer los elementos de una matriz de índice numérico:
<?php $a = array("one", "two", "three"); foreach($a as $index => $value ) { echo '$a['.$index."] = ".$value."<br />"; } ?>
También podemos recorrer los elementos de una matriz asociativa:
<?php $a = array("juan" => 12, "luis" => 25, "ana" => 37, "pepe" => 17); foreach($a as $key => $value) { echo '$a['.$key."] = ".$value."<br />"; } ?>
Del mismo modo, podemos recorrer los elementos de una matriz multidimensional:
<?php $calendario[] = array (1, "enero", 31); $calendario[] = array (2, "febrero", 28); $calendario[] = array (3, "marzo", 31); $calendario[] = array (4, "abril", 30); $calendario[] = array (5, "mayo", 31); foreach($calendario as $index => $value) { $cadena = '$calendario['.$index."]: "; $cadena .= $value[1]." es el mes numero ".$value[0]; $cadena .= " y tiene ".$value[2]." dias<br />"; echo $cadena; } ?>
Recursos
- Ayuda de PHP: Arrays
como puedo hacer un programa que capture notas de alumnos en matrices php
Excelente aporte, muchísimas gracias. Me has aclarado todas las dudas que tenía.
Salu2.