Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как отсортировать массив массивов по полю

Короткий ответ

usort() с оператором <=> сравнивает элементы по нужному полю:

<?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'));

Результат:

Anna, Oleg

По убыванию

Поменяйте $a и $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'));

Результат:

Oleg, Anna

По нескольким полям

Сравните массивы из нужных полей — они сравниваются по порядку:

<?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));

Результат:

Anna25 Anna31 Oleg25

Функции из этого ответа

  • usort — Сортирует массив по своему правилу сравнения.
  • array_column — Достаёт значения одного ключа из массива массивов.
  • uasort — Сортирует массив по своему правилу, сохраняя ключи.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.