Ordenar Arrays en PHP

Veamos algunos ejemplos de funciones que nos permiten ordenar arrays en PHP. Por su index o por su contenido.

tutoriales php

Volvemos con los tutoriales de programación de PHP, esta vez veremos varias formas de ordenar una Array.

USort

Una función que nos proporciona la posibilidad de ordenar una array, siendo nosotros los que creemos las condición de comparación pasándole una función que compare los elementos.

<?php
function miComparador($num1, $num2)
{
    if ($num1 == $num2) {
        return 0;
    }
    return ($num1 < $num2) ? -1 : 1;
}

$arrayAOrdenar = array(9, 2, 3, 7, 1);

usort($arrayAOrdenar, "miComparador");

Podemos ver que hemos creado una función ‘miComparador’ que se encarga de coger dos valores y compararlos. Si son iguales, devuelve 0. Si es menor devuelve -1 y si es mayor devuelve 1.

la función usort, recibe el array a ordenar, y la función encargadas de ir cogiendo los valores y compararlos. El resultado se almacena en la misma array que le hemos pasado, pero con los valores ordenados.

Array_multisort

Es una función que nos servirá para ordenar varias tablas teniendo en cuenta la posición de la primera array. Me explico con un ejemplo que cojo directamente de la web de PHP.net

<?php
$array1 = array(10, 100, 100, 0);
$array2 = array(1, 3, 2, 4);
array_multisort($array1, $array2);

var_dump($array1);
var_dump($array2);
?>

El resultado será:

array(4) {
  [0]=> int(0)
  [1]=> int(10)
  [2]=> int(100)
  [3]=> int(100)
}
array(4) {
  [0]=> int(4)
  [1]=> int(1)
  [2]=> int(2)
  [3]=> int(3)
}

Si os fijais el proceso es el siguiente:

  • Primero ordena al $array1 según sus valores (0,10,100,100)
  • La reordenación de la $array1, afectará y ordenará respetando las posiciones, al $array2

Hagamos paso a paso:

  • En $array1 ordenamos, y el que pasa a ser primer elemento es el 0. Qué posición ocupaba el 0? La posición 3 (recuerdo que las arrays empiezan por posición 0)
  • Como en la array1 ponemos primero al que ocupaba la posición 3, en la array2 haremos lo mismo. Quién ocupa la posición 3 de array2? el número 4. Por lo tanto, la función pondrá primero el número 4.
  • Siguiente. En array1 es el número 10 que ocupa la posición 0. Pues en array2, el siguiente será el número 1, que ocupa la posición 0

En definitiva, ordenamos el array según el valor de sus contenidos, y movemos los registros tanto de array1 como array2.

KSort

Esta función nos permitirá ordenar una array según sus claves de indexación. Veamoslo con un ejemplo:

<?php
$clientes = array("d"=>"Paco", "a"=>"Eloi", "c"=>"David", "b"=>"Raul");
ksort($clientes);
foreach ($clientes as $key => $val) {
    echo "$key = $val\n";
}
?>

El resultado será:

Eloi
Raul
David
Paco

Debéis fijaros, que la array se ordena según su índice. Tenemos los índices d,a,c,b y ksort lo que hace es ordenar los contenidos según estos indices.

Espero que estas tres funciones os sean suficiente para ordenar arrays en php. Hay más funciones, pero estas tres pueden ser de las más utilizadas.


Más información