curso php: principiante

Fundamentos prácticos y teóricos de php5

capítulo 1.1.1: Instalación en windows
capítulo 1.1.2: instalación en ubuntu
capítulo 2.2: tipos de variables
capítulo 3.1: uso de IF
capítulo 3.2: Uso de for
capítulo 3.3: Uso de Switch
capítulo 3.4: Uso de While
capítulo 3.5: Uso de Do ... While
capítulo 3.6: Uso de foreach

Manejando arrays multidimensionales - Curso de php: principiante

Vamos a profundizar con los arrays multidimensionales, ya que sabiendo operar con ellos correctamente, sabremos como hacerlo con los otros. Volvamos al ejemplo que planteamos en el capítulo anterior, y recuperemos nuestro array multidimensional:


<?php
$alumnos = array("pepe" => array("edad" => 22, "altura" => 180),
"alberto" => array("edad" => 20, "altura" => 170));
?>

Ahora, ordenemos un poco este caos, y presentémoslo adecuadamente:


$alumnos = array(
  "pepe" => array (
       "edad" => 22,
       "altura" => 18
      ),
  "alberto" => array (
       "edad" => 20,
       "altura" => 170
     )
);

Es el mismo ejemplo de antes, pero tabulado (os recuerdo que los espacios y las tabulaciones no se tienen en cuenta en PHP). Ahora lo que vamos a hacer, es añadir un nuevo elemento a nuestro array $alumnos, para hacerlo, haremos lo siguiente:


<?php
$alumnos["fernando"] = array("edad" => 22, "altura" => 175);
?>

Ahora si imprimimos nuestro array, y tendrá 3 resultados dentro:


Array (
   [pepe] => Array ( [edad] => 22 [altura] => 18 )
   [alberto] => Array ( [edad] => 20 [altura] => 170 )
   [fernando] => Array ( [edad] => 22 [altura] => 175 )
)

Ahora, eliminemos un registro de nuestro array. Esta operación se puede hacer de varias formas:


<?php
//Método 1º, dejando el array en blanco.
$alumnos["fernando"] = "";
//Método 2º, dejando el array sin contenido, usando el parámetro NULL
$alumnos["fernando"] = NULL;
//Destruyendo el array
unset($alumnos["fernando"]);
?>

Ahora maticemos esto, los dos primeros método, es decir, asignando a nuestro subarray el valor "" o NULL, no eliminan $alumnos["fernando"], la dejan sin valor, es decir, nula. Mientras que el último método, usando UNSET, si que elimina totalmente el valor.


En este punto, ya sabemos añadir y eliminar componentes de un array. Ahora vamos a ver como podemos ordenar un array, operación que también es importante, ya que por ejemplo, al añadir valores, los añadimos conforme nos van llegando, pero si luego queremos mostrar los nombres de los alumnos (volviendo al ejemplo) por orden alfabético, tendremos un problema, a no ser que podamos ordenar el array... Lo cual vamos a hacer ahora mismo. Primero veamos en que orden nos imprime el array originalmente:


Array (
   [pepe] => Array ( [edad] => 22 [altura] => 18 )
   [alberto] => Array ( [edad] => 20 [altura] => 170 )
   [fernando] => Array ( [edad] => 22 [altura] => 175 )
)

Si nos fijamos, [pepe], [alberto] y [fernando] son los índices principales, mientras que [edad] sería el primer valor asignado, y [altura] el segundo valor asignado.


La función sort(), nos ordena el array, en vase al primer valor asignado, es decir, [edad], obviando el indice principal, y lo hará de menor a mayor:


<?php
sort($alumnos);
//Mostrando
Array (
   [0] => Array ( [edad] => 20 [altura] => 170 )
   [1] => Array ( [edad] => 22 [altura] => 18 )
   [2] => Array ( [edad] => 22 [altura] => 175 )
)
?>

Ahora vamos a ordenarlos de forma inversa, para ello usaremos la inversa de sort(), que sería rsort(), y nos daría el resultado inverso:


<?php
rsort($alumnos);
//Mostrando
Array (
   [0] => Array ( [edad] => 22 [altura] => 175 )
   [1] => Array ( [edad] => 22 [altura] => 18 )
   [2] => Array ( [edad] => 20 [altura] => 170 )
)
?>

Ahora, vamos a ordenar los resultados en función del índice principal, es decir, del campo [nombre], para ello usaremos ksort, que las ordenará de menor a mayor, es decir, ordenará alfabéticamente de menor a mayor el campo [nombre]:


<?php
ksort($alumnos);
//Mostrando
Array (
   [alberto] => Array ( [edad] => 20 [altura] => 170 )
   [fernando] => Array ( [edad] => 22 [altura] => 175 )
   [pepe] => Array ( [edad] => 22 [altura] => 18 )
)
?>

La función krsort, hará la inversa, es decir, imprimir de forma alfabética, en orden inverso: empezando por [pepe]. La siguiente función, es asort(), que nos ordenará el array, en función de los valores asignados: [edad] y [altura], y lo hará de menor a mayor, por lo que primero ordenará de menor a mayor [edad], y si se encuentra un empaté, desempatará con el parámetro [altura], mostrando el de menor [altura] primero. Para hacer este ejemplo, ha modificado los datos de [fernando] dandole la [altura] de 165, para que se vea mejor el ejemplo:


<?php
$alumnos = array(
  "pepe" => array (
       "edad" => 22,
       "altura" => 180
      ),
  "alberto" => array (
       "edad" => 20,
       "altura" => 170
     )
);

$alumnos["fernando"] = array("edad" => 22, "altura" => 165);

asort($alumnos);
?>

El resultado sería:


Array ( 
   [alberto] => Array ( [edad] => 20 [altura] => 170 )
   [fernando] => Array ( [edad] => 22 [altura] => 165 )
   [pepe] => Array ( [edad] => 22 [altura] => 180 )
)

Tal y como esperábamos. Esta función, también tiene su inversa arsort(); Existen más formas de ordenar arrays, pero estas son las más comunes, por lo que si estás interesado, puedes ampliar la información en la web la documentación oficial de php:


http://es2.php.net/manual/en/ref.array.php