En PHP temos unha chea de funcións para ordenar arrays segundo distintos criterios. Dada o seguinte array:
$matriz = array("doUs" => '2', "vinte" => "20", '10',
30 => "30", "carlos", "coche", "VINTEUN" => "21",'D');
sort: ordena de menor a maior os valores, sen gardar os índices. Pódese empregar un segundo parámetro para indicar como debe ser a ordenación SORT_REGULAR (o valor por defecto, fai unha ordenación natural, primeiro os valores numéricos ordenados de xeito numérico e despois os valores alfanuméricos ordenados pola táboa de caracteres), SORT_NUMERIC (fai unha ordenación despois de convertir os valores a numéricos), SORT_STRING (fai unha ordenación pola táboa de caracteres)
sort($matriz);
var_export($matriz);
// Devolve array ( 0 => '2', 1 => '10', 2 => '20', 3 => '21', 4 => '30', 5 => 'D', 6 => 'carlos', 7 => 'coche', )
sort($matriz.SORT_REGULAR);
var_export($matriz);
// Devolve array ( 0 => '2', 1 => '10', 2 => '20', 3 => '21', 4 => '30', 5 => 'D', 6 => 'carlos', 7 => 'coche', )
sort($matriz,SORT_NUMERIC);
var_export($matriz);
// Devolve array ( 0 => 'coche', 1 => 'D', 2 => 'carlos', 3 => '2', 4 => '10', 5 => '20', 6 => '21', 7 => '30', )
sort($matriz,SORT_STRING);
var_export($matriz);
// Devolve array ( 0 => '10', 1 => '2', 2 => '20', 3 => '21', 4 => '30', 5 => 'D', 6 => 'carlos', 7 => 'coche', )
rsort: ordena de maior a menos os valores, sen gardar os índices
rsort($matriz);
var_export($matriz);
// Devolve array ( 0 => 'coche', 1 => 'carlos', 2 => 'D', 3 => '30', 4 => '21', 5 => '20', 6 => '10', 7 => '2', )
asort: ordena de menor a maior os valores, mantendo a asociación cos índices
asort($matriz);
var_export($matriz);
// Devolve array ( 'doUs' => '2', 0 => '10', 'vinte' => '20', 'VINTEUN' => '21', 30 => '30', 33 => 'D', 31 => 'carlos', 32 => 'coche', )
arsort: ordena de maior a menor os valores, mantendo a asociación cos índices
arsort($matriz);
var_export($matriz);
// Devolve array ( 32 => 'coche', 31 => 'carlos', 33 => 'D', 30 => '30', 'VINTEUN' => '21', 'vinte' => '20', 0 => '10', 'doUs' => '2', )
ksort: ordena de menor a maior os índices, mantendo a asociación cos valores
ksort($matriz);
var_export($matriz);
// Devolve array ( 'VINTEUN' => '21', 'doUs' => '2', 'vinte' => '20', 0 => '10', 30 => '30', 31 => 'carlos', 32 => 'coche', 33 => 'D')
krsort: ordena de maior a menor os índices, mantendo a asociación cos valores
krsort($matriz);
var_export($matriz);
// Devolve array ( 33 => 'D', 32 => 'coche', 31 => 'carlos', 30 => '30', 'vinte' => '20', 'VINTEUN' => '21', 0 => '10', 'doUs' => '2', )
natsort: ordena de menor a maior os valores empregando un método natural, mantendo a asociación cos índices
natsort($matriz);
var_export($matriz);
// Devolve array ( 'doUs' => '2', 0 => '10', 'vinte' => '20', 'VINTEUN' => '21', 30 => '30', 33 => 'D', 31 => 'carlos', 32 => 'coche', )
natcasesort: ordena de menor a maior os valores empregando un método natural e insensible ás maiúsculas (e dicir a ordenación é como se todas as letras estivesen en maiúsuculas), mantendo a asociación cos índices
natcasesort($matriz);
var_export($matriz);
// Devolve array ( 'doUs' => '2', 0 => '10', 'vinte' => '20', 'VINTEUN' => '21', 30 => '30', 31 => 'carlos', 32 => 'coche', 33 => 'D',)
usort:ordena os valores mediante unha función definida polo usuario, que establece cando un elemento e maior, menor ou igual que outro, sen gardar os índices
// ORDENA DE MENOR A MAIOR LONXITUDE DA CADEA
// EN CASO DE IGUALDADE COMPARA NORMALMENTE
function miOrdenacion($izq,$der) {
$diff = strlen($izq)-strlen($der);
if (!$diff)
return strcmp ($izq,$der);
else
return $diff;
}
usort($matriz,'miOrdenacion');
var_export($matriz);
// Devolve array ( 0 => '2', 1 => 'D', 2 => '21', 3 => '20', 4 => '21', 5 => '30', 6 => 'coche', 7 => 'carlos', )
uksort:ordena os índices mediante unha función definida polo usuario, que establece cando un elemento e maior, menor ou igual que outro, mantendo a asociación cos valores
uksort($matriz,'miOrdenacion');
var_export($matriz);
// Devolve array ( 0 => '10', 30 => '30', 31 => 'carlos', 32 => 'coche', 33 => 'D', 'doUs' => '2', 'vinte' => '20', 'VINTEUN' => '21', )
uasort:ordena os valores mediante unha función definida polo usuario, que establece cando un elemento e maior, menor ou igual que outro, mantendo a asociación cos valores
uasort($matriz,'miOrdenacion');
var_export($matriz);
// Devolve array ( 'doUs' => '2', 33 => 'D', 0 => '10', 'vinte' => '20', 'VINTEUN' => '21', 30 => '30', 32 => 'coche', 31 => 'carlos', )
Algunhas para desordearlos
shuffle: desordena os valores (baralla), sen gardar os índices
shuffle($matriz);
var_export($matriz);
// Devolve array ( 0 => 'carlos', 1 => '2', 2 => '20', 3 => '30', 4 => '21', 5 => '10', 6 => 'coche', )
array_keys: devolve un array onde os valores son os índices do array orixinal. Esta función pemite posteriormente con shuffle desordenar estos valores (os índices do array orixinal) e acceder mediante estes valores desordenados os elementos do array orixinal co que xa mantemos a asociación entre índices e valores do array orixinal, pero tendo os elementos desordenados.
$indices = array_keys($matriz);
shuffle($indices);
foreach ($indices as $v)
$matriz2[$v]=$matriz[$v];
var_export($matriz2);
// Devolve array ( 'vinte' => '20', 0 => '10', 'doUs' => '2', 31 => 'carlos', 32 => 'coche', 'VINTEUN' => '21', 30 => '30', )