miércoles, 30 de julio de 2014

Ordenando un arreglo de objetos en PHP

Recientemente me tocó realizar una función para ordenar un arreglo de elementos en PHP con la particularidad de que cada elemento es un objeto definido. Cada objeto del arreglo representaba un artículo de un catálogo y se debía ordenar el arreglo por la propiedad "precio" de cada objeto, de mayor a menor.

Al principio estuve tentado a repasar el algoritmo básico Quicksort y hacerle alguna modificación para trabajar con arreglos de objetos pero luego recordé que PHP tiene una función bien práctica para esto llamada usort.

bool usort ( array &$array , callable $value_compare_func )

La funcion usort recibe como parámetros un arreglo de cualquier tipoy el nombre de una función personalizada que se encargará de realizar la comparación interna de cada posición del arreglo. Suponiendo que nuestro arreglo se llama "artículos" y cada posición del arreglo es un objeto con una propiedad llamada "precio", podemos ordenar nuestro arreglo de menor a mayor de la siguiente manera:


function compararArticulos($a, $b){
    if ($a->precio == $b->precio){
        return 0;
    }
    return ($a->precio < $b->precio) ? -1 : 1;
}

usort($articulos, "compararArticulos");


Luego de esto ya es más fácil aplicar el ejemplo para ordenar arreglos multidimensionales.

No hay comentarios:

Publicar un comentario en la entrada