Curso PHP: Arrays multidimensionales

Curso PHP: Arrays multidiminesionales

En la última lección vimos qué eran y cómo se utilizaban los arrays unidimensionales tanto simples como asociativos. Bien, los arrays multidimensionales son parecidos a los que ya vimos, con la única diferencia de que estos tienen más ramas, por lo que no representan solo la información que se puede imaginar en una fila, sino que también información en diferentes columnas o incluso una tabla dentro de una celda concreta (si nos lo imaginamos como una tabla de información).

Sé que esto es mucha teoría y que sin fondo práctico no se acaba de ver del todo. Creo que la mejor de entender el funcionamiento de los Arrays es planteando datos reales y convirtiéndolos en un Array. Después, acceder a dichos datos mediante el uso de los índices que hayamos definido antes o que el intérprete de PHP haya definido automáticamente por nosotros.

Listado de alumnos y sus notas por materia

Alumno Notas
Nombre: Antonio
Apellidos: Gutierrez Garcia
Programación: 8
Lenguajes de marcas: 10
Maquetación y CSS: 7
Nombre: Mohammed
Apellidos: Al-Watani
Programación: 8.5
Lenguajes de marcas: 8
Maquetación y CSS: 7.5
Nombre: John
Apellidos: Bale
Programación: 6
Lenguajes de marcas: 6.5
Maquetación y CSS: 5.5
Nombre: Vladimir
Apellidos: Kucherköv
Programación: 7
Lenguajes de marcas: 5
Maquetación y CSS: 5

Representación del listado de alumnos y sus notas por materia

Viendo la tabla podemos llegar a la conclusión de que tenemos 2 claves principales: alumno y notas. Como dentro de cada una de estas claves tenemos subclaves, tendremos que utilizar Arrays multidimensionales asociativos y jerárquicos (Array dentro de otro Array). Vamos a representar esto dentro de un array en PHP:

<?php
 
$notas =
	array(
		array('alumno' => '', 'notas' => '')
	);
 
?>

Podemos ver que tenemos un array padre que se puede ver como la tabla que contiene las filas de datos de todos los alumnos. Dentro de éste tenemos otro array que se puede ver como una fila de datos con 2 columnas.

Ahora vamos a ver cómo representar los datos de estas claves. Para el alumno, como tiene más de un dato, tendremos que crear otro array con los índices ‘nombre’ y ‘apellidos’ de la siguiente manera:

<?php
 
$notas =
	array(
		array(
			'alumno' => array('nombre' => '', 'apellidos' => ''),
			'notas' => ''
		)
	);
?>

Y para las notas, tendremos que hacer lo mismo, ya que dentro del mismo campo (celda) tenemos 3 datos diferentes:

<?php
 
$notas =
	array(
		array(
			'alumno' => array('nombre' => '', 'apellidos' => ''),
			'notas' => array('prog' => '', 'lenmarc' => '', 'maq' => '')
		)
	);
?>

Una vez tenemos clara la estructura del Array podemos multiplicar el array de segundo nivel por cada alumno que tengamos:

<?php
 
$notas =
	array(
		array(
			'alumno' => array('nombre' => '', 'apellidos' => ''),
			'notas' => array('prog' => '', 'lenmarc' => '', 'maq' => '')
		),
		array(
			'alumno' => array('nombre' => '', 'apellidos' => ''),
			'notas' => array('prog' => '', 'lenmarc' => '', 'maq' => '')
		),
		array(
			'alumno' => array('nombre' => '', 'apellidos' => ''),
			'notas' => array('prog' => '', 'lenmarc' => '', 'maq' => '')
		),
		array(
			'alumno' => array('nombre' => '', 'apellidos' => ''),
			'notas' => array('prog' => '', 'lenmarc' => '', 'maq' => '')
		)
	);
?>

Y después rellenar los datos:

<?php
$notas =
	array(
		array(
			'alumno' => array('nombre' => 'Antonio', 'apellidos' => 'Gutierrez Garcia'),
			'notas' => array('prog' => 8, 'lenmarc' => 10, 'maq' => 7)
		),
		array(
			'alumno' => array('nombre' => 'Mohammed', 'apellidos' => 'Al-Watani'),
			'notas' => array('prog' => 8.5, 'lenmarc' => 8, 'maq' => 7.5)
		),
		array(
			'alumno' => array('nombre' => 'John', 'apellidos' => 'Bale'),
			'notas' => array('prog' => 6, 'lenmarc' => 6.5, 'maq' => 5.5)
		),
		array(
			'alumno' => array('nombre' => 'Vladimir', 'apellidos' => 'Kucherköv'),
			'notas' => array('prog' => 7, 'lenmarc' => 5, 'maq' => 5)
		)
	);
?>

Podemos imprimir el array en el navegador de la siguiente manera:

echo '<pre>' . print_r($notas, true);

Ya que tenemos los datos en un Array, podemos ver cómo acceder a datos individuales dentro de este array asociativo que acabamos de crear. Por ejemplo, ¿cómo accederíamos a la nota de programación de Vladimir? Bien, antes de empezar, vamos a mostrar por pantalla en el navegador el contenido del array usando la sentencia de arriba. Una vez hecho, tendremos a nuestra disposición la estructura del Array y también los índices.

Vamos a utilizar el índice del array principal para acceder primero a los datos del alumno:

echo '<pre>' . print_r($notas[3], true);

Con esta sentencia obtenemos el siguiente resultado:

Array
(
    [alumno] => Array
        (
            [nombre] => Vladimir
            [apellidos] => Kucherköv
        )

    [notas] => Array
        (
            [prog] => 7
            [lenmarc] => 5
            [maq] => 5
        )

)

Ya que tenemos el alumno seleccionado, ahora vamos a seleccionar y mostrar por pantalla tanto su nombre completo como su nota de programación. Para ello tendremos que usar índices multidimensionales de la siguiente manera:

echo '<b>' . $notas[3]['alumno']['nombre'] . ' ' . $notas[3]['alumno']['apellidos'] . '</b><br/>';
echo 'Programación: ' . $notas[3]['notas']['prog'];

Si nos fijamos, hemos tenido que acceder primero al conjunto de datos del alumno (3) después al ‘nombre’ y ‘apellidos’ que estaban dentro del subconjunto ‘alumno’ y finalmente a las ‘notas’ y dentro de las notas a la de programación ‘prog’ concretamente. Que nos muestra por pantalla:

Vladimir Kucherköv
Programación: 7

Espero que os haya sido de ayuda y se haya entendido. Cualquier consulta, podéis utilizar el formulario de comentarios de más abajo.

En la próxima lección vamos a ver como hacer un bucle para iterar todos los datos del Array sin tener que acceder a los datos uno por uno. Nos vemos 😉

Curso PHP: Arrays simples y asociativos
Curso PHP: Bucle foreach
1 comentario  

  • Saturnino

    Estoy sorprendido de encontrar esta web. Quería daros las gracias por redactar esta maravilla. Sin duda he gozado cada pedacito de ella. Os te tengo en la lista para ver más cosas nuevas de este blog .

    08/08/2015 - 16:24/ Responder

Publicar un comentario