Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/11/2020, 12:40
schattenburg
 
Fecha de Ingreso: junio-2007
Mensajes: 298
Antigüedad: 16 años, 10 meses
Puntos: 5
Ordenar un array asociativo por un campo concreto

Hola a todos, tengo el siguiente código:

function orderByCampo($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);
}

$arrPrueba = array();

$arrPrueba[0]["id"] = 1;
$arrPrueba[0]["prioridad"] = 1.6;
$arrPrueba[0]["texto"] = "uno";

$arrPrueba[1]["id"] = 2;
$arrPrueba[1]["prioridad"] = 1.0;
$arrPrueba[1]["texto"] = "dos";

$arrPrueba[2]["id"] = 3;
$arrPrueba[2]["prioridad"] = 0.4;
$arrPrueba[2]["texto"] = "tres";

$arrPrueba[3]["id"] = 4;
$arrPrueba[3]["prioridad"] = -0.8;
$arrPrueba[3]["texto"] = "cuatro";

$arrPrueba[4]["id"] = 5;
$arrPrueba[4]["prioridad"] = -0.6;
$arrPrueba[4]["texto"] = "cinco";

orderByCampo($arrPrueba, "prioridad", "asc");

foreach ($arrPrueba as $clave=>$valor) {
echo $valor["id"]."<br>";
echo $valor["prioridad"]."<br>";
echo $valor["texto"];
echo "<hr>";
}

Pero no me funciona, no me ordena el array por el campo prioridad (lo deja como está originalmente). ¿en qué puede estar fallando este código? llevo ya una hora con ello y no localizó en qué puede fallar.

Espero vuestra respuesta.

Muchas gracias por adelantado.