How to Sort an Array of Associative Arrays by Value of a Given Key in PHP
In this article, we will cover a common issue: how to sort an array of arrays by the value of a given key with PHP.
Below, you can find the handiest methods with their examples.
Use array_multisort()
Let’s see how to use the array_multisort() function:
<?php
$inventory = [
[ 'type' => 'pork', 'price' => 5.43 ],
['type' => 'milk', 'price' => 2.9 ],
['type' => 'fruit', 'price' => 3.5]
];
$price = [];
foreach ($inventory as $key => $row) {
$price[$key] = $row['price'];
}
array_multisort($price, SORT_DESC, $inventory);
var_dump($inventory);
?>
In PHP 5.5 and above versions, array_column() can be used instead of foreach.
Here is how to do that:
<?php
$inventory = [
[ 'type' => 'pork', 'price' => 5.43 ],
['type' => 'milk', 'price' => 2.9 ],
['type' => 'fruit', 'price' => 3.5]
];
$price = array_column($inventory, 'price');
array_multisort($price, SORT_DESC, $inventory);
var_dump($inventory);
?>
Use Custom Comparison Function
Another option is using the custom comparison function. It is a pretty quick and handy solution to the problem.
Here is the example:
<?php
$inventory = [
[ 'type' => 'pork', 'price' => 5.43 ],
['type' => 'milk', 'price' => 2.9 ],
['type' => 'fruit', 'price' => 3.5]
];
function invenDescSort($item1, $item2)
{
if ($item1['price'] == $item2['price']) {
return 0;
}
return $item1['price'] < $item2['price'] ? 1 : -1;
}
usort($inventory, 'invenDescSort');
var_dump($inventory);
?>
It will produce:
array(3) { [0] => array(2) { 'type' => string(4) "pork" 'price' => double(5.43) } [1] => array(2) { 'type' => string(5) "fruit" 'price' => double(3.5) } [2] => array(2) { 'type' => string(4) "milk" 'price' => double(2.9) } }
In this tutorial, we represented two methods of sorting an array of arrays by the value of a given key with PHP.
However, there are other possible solutions to the issue. You can find more information and options on this page.