// Sorting an array by multiple fields
$people = [
['name' => 'John', 'age' => 28, 'city' => 'New York'],
['name' => 'Alice', 'age' => 24, 'city' => 'Los Angeles'],
['name' => 'Bob', 'age' => 32, 'city' => 'Chicago'],
['name' => 'Charlie', 'age' => 24, 'city' => 'San Francisco']
];
// Create arrays for the fields you want to sort by
$age = array_column($people, 'age');
$name = array_column($people, 'name');
// Use array_multisort to sort by age (ascending) and then by name (ascending)
array_multisort($age, SORT_ASC, $name, SORT_ASC, $people);
print_r($people);
// output
Array
(
[0] => Array
(
[name] => Alice
[age] => 24
[city] => Los Angeles
)
[1] => Array
(
[name] => Charlie
[age] => 24
[city] => San Francisco
)
[2] => Array
(
[name] => John
[age] => 28
[city] => New York
)
[3] => Array
(
[name] => Bob
[age] => 32
[city] => Chicago
)
)
// Sorting by multiple fields with different sort orders
$people = [
['name' => 'John', 'age' => 28, 'city' => 'New York'],
['name' => 'Alice', 'age' => 24, 'city' => 'Los Angeles'],
['name' => 'Bob', 'age' => 32, 'city' => 'Chicago'],
['name' => 'Charlie', 'age' => 24, 'city' => 'San Francisco']
];
// Create arrays for age and name
$age = array_column($people, 'age');
$name = array_column($people, 'name');
// Sort by age descending and by name ascending
array_multisort($age, SORT_DESC, $name, SORT_ASC, $people);
print_r($people);
// output
Array
(
[0] => Array
(
[name] => Bob
[age] => 32
[city] => Chicago
)
[1] => Array
(
[name] => John
[age] => 28
[city] => New York
)
[2] => Array
(
[name] => Alice
[age] => 24
[city] => Los Angeles
)
[3] => Array
(
[name] => Charlie
[age] => 24
[city] => San Francisco
)
)