This page explains how to sort a multidimensional array in PHP. This frequently happens when the array is the result of a database query.
Let's considere the following multidimensional array:
$array[] = array('name' => 'Dupont', 'age' => 72);
$array[] = array('name' => 'Albert', 'age' => 11);
$array[] = array('name' => 'Durand', 'age' => 56);
$array[] = array('name' => 'Michel', 'age' => 52);
$array[] = array('name' => 'Dupont', 'age' => 36);
$array[] = array('name' => 'Plutot', 'age' => 27);
| Name | Age |
|---|---|
| Dupont | 72 |
| Albert | 11 |
| Durand | 56 |
| Michel | 52 |
| Dupont | 36 |
| Plutot | 27 |
We have an array of rows, but array_multisort() requires an array of columns, so we use the below code to obtain the columns, then perform the sorting.
$columns = array_column($array, 'name');
array_multisort($columns, SORT_ASC, $array);
Here is the result:
| Name | Age |
|---|---|
| Albert | 11 |
| Dupont | 36 |
| Dupont | 72 |
| Durand | 56 |
| Michel | 52 |
| Plutot | 27 |
$columns = array_column($array, 'age');
array_multisort($columns, SORT_DESC, $array);
Here is the result:
| Name | Age |
|---|---|
| Dupont | 72 |
| Durand | 56 |
| Michel | 52 |
| Dupont | 36 |
| Plutot | 27 |
| Albert | 11 |
$columns_1 = array_column($array, 'name');
$columns_2 = array_column($array, 'age');
array_multisort($columns_1, SORT_ASC, $columns_2, SORT_DESC, $array);
Here is the result:
| Name | Age |
|---|---|
| Albert | 11 |
| Dupont | 72 |
| Dupont | 36 |
| Durand | 56 |
| Michel | 52 |
| Plutot | 27 |