sábado, 6 de septiembre de 2014

PHP (02) Cadenas y matrices (09) Ordenar matrices

Puede ser muy útil el poder ordenar la matrices (ordenar datos de las consultas a una base datos, de un objeto JSON...), para ello hay una serie de funciones muy útiles que nos puede ayudar como sort, asort, ksort... (funciones expuestas en el articulo de funciones de matrices), pero que ahora veremos con un poco de más profundidad, tomando alguna de ellas como ejemplo:

sort / rsort

Nos va a ordenar el array de forma alfabética, es decir va a tomar los valores del array y los ordena, como vemos en el siguiente ejemplo:
<?php
$escritores = array (0=> "Unamuno", 1=> "Cervantes", 2=> "Machado", 3=> "Becquer");
echo '<p>';
print_r($escritores);
echo '</p>';
sort($escritores);
echo '<p>';
print_r($escritores);
echo '</p>';
?>

Que nos da como resultado:
Array ( [0] => Unamuno [1] => Cervantes [2] => Machado [3] => Becquer )
Array ( [0] => Becquer [1] => Cervantes [2] => Machado [3] => Unamuno )

Como podemos ver una vez que se le aplica la función sort reordena el array de forma alfabética.
Si quisiéramos que nos lo ordenase de forma invertida tan solo deberíamos cambiar la función sort por la función rsort.

asort / arsort

Utilizar sort no funciona muy bien cuando se utilizan índices de texto, para ello podemos utilizar las funciones asort y arsort para lograr ejemplos como el siguiente:
<?php
$notas = array ("Jose"=>7.4, "Maria"=>4.2, "Lourdes"=>8.0, "Antonio"=>5.6);
echo '<h2>asort</h2><p>';
print_r($notas);
echo '</p>';
asort($notas);
echo '<p>';
print_r($notas);
echo '</p>';
?>

Que nos da como resultado:
Array ( [Jose] => 7.4 [Maria] => 4.2 [Lourdes] => 8 [Antonio] => 5.6 )
Array ( [Maria] => 4.2 [Antonio] => 5.6 [Jose] => 7.4 [Lourdes] => 8 ) 

Ordenando los valores por orden alfabético, en este caso numeral creciente.
Si queremos que el array se clasifique de forma inversa entonces usaremos arsort.

ksort / krsort

Pero si queremos ordenar el array por sus índices y no por su valores podemos utilizarlas funciones como en el siguiente ejemplo:
<?php
$notas = array ("Jose"=>7.4, "Maria"=>4.2, "Lourdes"=>8.0, "Antonio"=>5.6);
echo '<h2>asort</h2><p>';
print_r($notas);
echo '</p>';
ksort($notas);
echo '<p>';
print_r($notas);
echo '</p>';
?>

Que nos da como resultado:
Array ( [Jose] => 7.4 [Maria] => 4.2 [Lourdes] => 8 [Antonio] => 5.6 )
Array ( [Antonio] => 5.6 [Jose] => 7.4 [Lourdes] => 8 [Maria] => 4.2 ) 

Si nos fijamos podemos ver como ahora ha ordenado los valores del array por índices de forma alfabética, y para hacerlo al contrario, tan solo hace falta cambiar la funcin ksort por krsort.

No hay comentarios:

Publicar un comentario