Sort an array by a child array's value in PHP
I have an array composed of arrays. I want to sort the parent array by a property of the child arrays. Here's an example
array(2){
[0]=> array(3){
[0]=> string(6) "105945"
[1]=> string(10) "First name"
[2]=> float(0.080878465391)
}
[1]=> array(3) {
[0]=> string(6) "109145"
[1]=> string(11) "Second name"
[2]=> float(0.0504154818384)
}
}
I would like to sort the parent array by [2]
ascending in the child arrays, so in this case the result would be the child arrays reversed (.05
, 08
). Is this possible using any of the numerous PHP sort functions?
You can make use of usort function as:
$arr = array(
array("105945","First name",0.080878465391),
array("109145","Second name",0.0504154818384)
);
function cmp($a, $b) {
if ($a[2] == $b[2]) {
return 0;
}
return ($a[2] < $b[2]) ? -1 : 1;
}
usort($arr,"cmp");
As of PHP >= 7.0 you can use usort in combination with the spaceship operator
usort($arr, function ($a, $b) {
return $a[2] <=> $b[2];
});
see: http://php.net/manual/de/migration70.new-features.php
For database like patterns use array_multisort as seen in example #3.
For example:
$sort = array();
foreach ($data as $key => $row) {
$sort[$key] = $row['basis'];
}
array_multisort($sort, SORT_ASC, $data);
where $data
is your data array and basis
is the element used for sorting.