Ordenar arrays PHP.

Resumen.

Como ya se comento en su momento, los array es un tipo de variable que contiene un conjunto de datos. Se puede decir que los arrays tienen dos partes, una es la clave o key, y la otra es el valor o value. Las claves y valores pueden mantener relación o no mantenerla de cara a establecer un orden de los elementos. De eso nos ocuparemos en este capitulo.

Artículo.

Como ya dijimos en algún momento, las variables tipo array tienen una gran importancia, son tremendamente versátiles y se puede hacer muchísimas cosas con ellas, y una de ellas, la mas obvia en que cualquiera pensaría, es ordenar sus elementos.

Como ya dijimos, las variables tipo array las podemos presentar de dos formas, una sin marcar la clave o key, de la siguiente manera:


$mis_amigos = array('Antonio', 'Marcos', 'Emma', 'Venus', 'Vanesa');



En este array no hemos definido las claves o keys, pero eso no significa que no estén ahí, si imprimimos este array mediante la expresión


echo '<pre>';
print_r($mis_amigos);
echo '</pre>';



obtendremos esto


Array
(
    [0] => Antonio
    [1] => Marcos
    [2] => Emma
    [3] => Venus
    [4] => Vanesa
)



Como vemos aparece un valor numérico entre corchetes [], ese valor es la key o clave. Si no definimos la key en el array, PHP se lo asigna comenzando por el cero para el primer valor.

Por supuesto, nosotros podemos asignar la key que queramos a cada valor del array, lo que podemos hacer de la siguiente manera:


$mis_amigos = array(1=>'Antonio', 3=>'Marcos', 2=>'Emma', 4=>'Venus', 6=>'Vanesa');



Y el resultado es


Array
(
    [1] => Antonio
    [3] => Marcos
    [2] => Emma
    [4] => Venus
    [6] => Vanesa
)



Como podemos ver, les hemos asignado keys impares a los hombres y pares a las mujeres. Y ¿por qué cuento todo esto?

En el primer array, donde no definimos las claves, puede no tener importancia alguna (lo que no significa que no pueda tenerla) que cada nombre este o no relacionado con una key. Por el contrario en el segundo no me da lo mismo que a Emma le corresponda la key 2 que la 3 ya que asignarle una key impar, indicaría un sexo que no es el que le corresponde.

Por tanto, para ordenar un array debemos tener cuatro criterios en cuenta:


  • Ordenar en función de la clave o key.

  • Ordenar en función del valor o value.

  • Ordenar manteniendo o no la relación entre keys y values.

  • Sentido en que queremos ordenar, ascendente o descendente.



Sobre estos cuatro criterios, también tenemos que tener en cuenta la naturaleza de las keys y los values, es decir, son numéricos o string (cadena). Veamos:


[7] => 2
[2] => Emma
[Emma] => 2
[abogada] => Emma



La página oficial de PHP recoge 26 funciones para ordenar arrays, pero desde aquí solo pondremos algunos ejemplos.



<?php
// Ejemplos de ordenacion de arrays

$calificaciones = array(6854677934);
asort($calificaciones);
// Ordena por valor ascendente y manteine la relacion con las keys
    
echo '<pre>';
    
print_r($calificaciones);
    echo 
'</pre>';

$mis_amigos = array(1=>'Antonio'3=>'Marcos'2=>'Emma'4=>'Venus'6=>'Vanesa');
rsort($mis_amigos);
// Ordena por valor y no mantiene la relacion entre claves y valores asignando nuevas keys
    
echo '<pre>';
    
print_r($mis_amigos);
    echo 
'</pre>';


$valoraciones = array('Antonio' => 7'Marcos' => 8'Emma' => 9'Venus' => 8.5);
natsort($valoraciones);
// Ordena por valor ascendente y mantiene la relacion entre key y value
    
echo '<pre>';
    
print_r($valoraciones);
    echo 
'</pre>';


$profesiones = array('Antonio' => 'Programador''Marcos' => 'Economista''Emma' => 'Abogada''Venus' => 'Tenista');
// Ordena por key descendente y mantiene la relacion entre key y value
krsort($profesiones);

    echo 
'<pre>';
    
print_r($profesiones);
    echo 
'</pre>';
?>



Como podemos ver, ordenar arrays es muy sencillo en lo que a sintaxis se refiere, el mayor problema está en elegir la función adecuada para la ordenación que deseamos obtener, por lo que recomendamos tomar un array como el que queremos ordenar y poner a prueba las funciones de ordenación que consideremos adecuadas antes de una aplicación definitiva en nuestras aplicaciones.

Haciendo un esquema de las funciones que mas he usado, podemos decir que serian estas:

Ordena los valores del array
Con SORT: Ascendente y NO se mantiene la relación entre claves y valores.
Con RSORT: Descendente y NO se mantiene la relación entre claves y valores.

Con ASORT: Ascendente y SI se mantiene la relación entre claves y valores.
Con ARSORT: Descendente y SI se mantiene la relación entre claves y valores.

Ordena las claves del array
Con KSORT: Ascendente y SI se mantiene la relación entre claves y valores.
Con KRSORT: Descendente y SI se mantiene la relacion entre claves y valores.

SHUFFLE: Orden aleatorio y NO mantiene la relación entre claves y valores.

Cuando nos enfrentamos a la duda sobre que función es la adecuada para nuestro caso, recomendamos el uso del siguiente código para ponerlas a prueba.


<?php
// Código para poner a prueba las funciones de orden en arrays

$profesiones = array('Antonio' => 'Programador''Marcos' => 'Economista''Emma' => 'Abogada''Venus' => 'Tenista');
// Ordena por key descendente y mantiene la relacion entre key y value
    // Antes de la ordenacion
    
echo '<pre>';
    
print_r($profesiones);
    echo 
'</pre>';
    
krsort($profesiones);
    
// Despues de la ordenacion
    
echo '<pre>';
    
print_r($profesiones);
    echo 
'</pre>';
?>



Y con esto, cerramos este capitulo, que si bien es muy sencillo en cuanto a sintaxis, es mas delicado en cuanto a si la función que usamos es adecuada para el tipo de array al que se la queremos aplicar según el resultado que queremos obtener.
Tags: Ordenar || array || SORT || ASORT || ARSORT || KSORT || KRSORT || SHUFFLE

Comentarios.

Sin comentarios, publica el tuyo.