ccc

Ordenar un array asociativo por cualquiera de los campos

function orderByLSG($items, $attr, $order) {
    $sortedItems = [];
    foreach ($items as $item) {
        $key = is_object($item) ? $item->{$attr} : $item[$attr];
        $sortedItems[$key] = $item;
    }
    if ($order === 'desc') {
        krsort($sortedItems);
    } else {
        ksort($sortedItems);
    }

    return array_values($sortedItems);
}

$arr = array();
$arrAux = ["id"=>1, "nombre"=>"James Stewart", "pelicula" =>"Historias de Philadelphia"];
$arr[] = $arrAux;
$arrAux = ["id"=>2, "nombre"=>"Gary Cooper", "pelicula" =>"El sargento York"];
$arr[] = $arrAux;
$arrAux = ["id"=>3, "nombre"=>"James Cagney", "pelicula" =>"Yanqui Dandy"];
$arr[] = $arrAux;
$arrAux = ["id"=>4, "nombre"=>"Paul Lukas", "pelicula" =>"Alarma en el Rhin"];
$arr[] = $arrAux;

print_r(orderByLSG($arr, "nombre", "asc"));
print_r(orderByLSG($arr, "pelicula", "asc"));

El método anterior funciona siempre que el índice no sea negativo, para esos casos es mejor ordenar así:
function compararCampo($a, $b) {
  if ($a["campoAComparar"] == $b["campoAComparar"]) {
     return 0;
  }
   return ($a["campoAComparar"] < $b["campoAComparar"]) ? -1 : 1
}
...
uasort($arrAux, 'compararCampo');

No hay comentarios:

Publicar un comentario