Encodera

Thanks for reading!

Donate to the site — we work hard for you.

How to sort an array of arrays by a field

Short answer

usort() with the <=> operator compares the elements by the needed field:

<?php
 
$users = [['name' => 'Oleg', 'age' => 31], ['name' => 'Anna', 'age' => 25]];
 
usort($users, fn ($a, $b) => $a['age'] <=> $b['age']);
 
echo implode(', ', array_column($users, 'name'));

Output:

Anna, Oleg

Descending

Swap $a and $b:

<?php
 
$users = [['name' => 'Oleg', 'age' => 31], ['name' => 'Anna', 'age' => 25]];
 
usort($users, fn ($a, $b) => $b['age'] <=> $a['age']);
 
echo implode(', ', array_column($users, 'name'));

Output:

Oleg, Anna

By several fields

Compare arrays of the needed fields — they are compared in order:

<?php
 
$users = [['name' => 'Oleg', 'age' => 25], ['name' => 'Anna', 'age' => 31], ['name' => 'Anna', 'age' => 25]];
 
usort($users, fn ($a, $b) => [$a['name'], $a['age']] <=> [$b['name'], $b['age']]);
 
echo implode(' ', array_map(fn ($user) => $user['name'] . $user['age'], $users));

Output:

Anna25 Anna31 Oleg25

Functions used in this recipe

  • usort — Sorts an array by a custom comparison rule.
  • array_column — Pulls the values of one key out of an array of arrays.
  • uasort — Sorts an array by a custom rule, keeping the keys.

Thanks for reading!

Donate to the site — we work hard for you.