Como ordenar um conjunto de matrizes associativas pelo valor de uma determinada chave em PHP?

Dada esta matriz:

$inventory = array(

   array("type"=>"fruit", "price"=>3.50),
   array("type"=>"milk", "price"=>2.90),
   array("type"=>"pork", "price"=>5.43),

);

Eu gostaria de ordenar $inventory's elementos por preço a obter:

$inventory = array(

   array("type"=>"pork", "price"=>5.43),
   array("type"=>"fruit", "price"=>3.50),
   array("type"=>"milk", "price"=>2.90),

);

Como é que eu posso fazer isto?

$inventory = 
    array(array("type"=>"fruit", "price"=>3.50),
          array("type"=>"milk", "price"=>2.90),
          array("type"=>"pork", "price"=>5.43),
          );

function pricesort($a, $b) {
  $a = $a['price'];
  $b = $b['price'];
  if ($a == $b)
    return 0;
  return ($a > $b) ? -1 : 1;
}

usort($inventory, "pricesort");
// uksort($inventory, "pricesort");

print("first: ".$inventory[0]['type']."\n\n");
// for usort(): prints milk (item with lowest price)
// for uksort(): prints fruit (item with key 0 in the original $inventory)

// foreach prints the same for usort and uksort.
foreach($inventory as $i){
  print($i['type'].": ".$i['price']."\n");
}

saídas:

first: pork

pork: 5.43
fruit: 3.5
milk: 2.9
Comentários (0)

Você pode tentar definir a sua própria função de comparação e depois usar usort.

Comentários (1)

Experimenta isto:

asort($array_to_sort, SORT_NUMERIC);

para referência, veja isto: http://php.net/manual/en/function.asort.php

ver vários tipos de bandeiras aqui: http://www.php.net/manual/en/function.sort.php

Comentários (2)