Posts match “ uasort ” tag:

Podemos tener el caso que tengamos un array de objetos, los cuales queramos añadir mediante cóigo, y a partir de uno de sus atributos, para ello la API de php proporciona la funció usort .

Supongamos que tenemos el array de datos siguiente:

 Array
(
    [element-0] => stdClass Object
        (
            [ID] => 1
            [nombre] => María
            [edad] => 42
        )

    [element-1] => stdClass Object
        (
            [ID] => 2
            [nombre] => Fernando
            [edad] => 23
        )

    [element-2] => stdClass Object
        (
            [ID] => 3
            [nombre] => Juan
            [edad] => 35
        )

Y para realizar la ordenación, a la función usort pasaremos como parámetros el array que queremos ordenar y la función que realizará las comprobaciones.

usort($teachers,'sortArrayByLastName');

donde la función sortArrayByLastName sería:

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

Dando como resultado , si lo imprimos:

Fernando
Juan
María

Si queremos realizarlos de manera ascendente o descendente tendremos que invertir el comparador < por > en la función.

Una versión más completa podría ser la siguiente que ofrece la posibilidad de ordenar String, o de manera ascendente o descendente.

   function sortArrayByKey(&$array,$key,$string = false,$asc = true){
    if($string){
        usort($array,function ($a, $b) use(&$key,&$asc)
        {
            if($asc)    return strcmp(strtolower($a[$key]), strtolower($b[$key]));
            else        return strcmp(strtolower($b[$key]), strtolower($a[$key]));
        });
    }else{
        usort($array,function ($a, $b) use(&$key,&$asc)
        {
            if($a[$key] == $b[$key]){return 0;}
            if($asc) return ($a[$key] < $b[$key]) ? -1 : 1;
            else     return ($a[$key] > $b[$key]) ? -1 : 1;

        });
    }
}

y su uso sería:

sortArrayByKey($yourArray,"name",true); //String sort (ascending order)
sortArrayByKey($yourArray,"name",true,false); //String sort (descending order)
sortArrayByKey($yourArray,"id"); //number sort (ascending order)
sortArrayByKey($yourArray,"count",false,false); //number sort (descending order)

Hay que tener en cuenta que usort hace perder las claves del array original, es decir, que el array inicial, quedaría.

 Array
(
    [0] => stdClass Object
        (
            [ID] => 2
            [nombre] => Fernando
            [edad] => 23
        )

    [1] => stdClass Object
        (
            [ID] => 3
            [nombre] => Juan
            [edad] => 35
        )
        
    [2] => stdClass Object
        (
            [ID] => 1
            [nombre] => María
            [edad] => 42
        )   

para evitarlo y si las claves son necesarias y no quieres perderlas deberás utilizar la función uasort(), que funciona de forma similar pero manteniendo las claves:
cuenta que usort hace perder las claves del array original, es decir, que el array inicial, quedaría.

 Array
(
    [element-0] => stdClass Object
        (
            [ID] => 2
            [nombre] => Fernando
            [edad] => 23
        )

    [element-1] => stdClass Object
        (
            [ID] => 3
            [nombre] => Juan
            [edad] => 35
        )
        
    [element-2] => stdClass Object
        (
            [ID] => 1
            [nombre] => María
            [edad] => 42
        )   

Podéis encontrar más información en la documentación oficial.

Copyright © 2016 runando