Есть таблица сотрудников в виде двумерного массива $arOffice .
$arOffice = [
'Менеджер' => [
'name' => 'Иван',
'surname' => 'Иванов'
],
'Дизайнер' => [
'name' => 'Александр',
'surname' => 'Александров'
],
'Программист' => [
'name' => 'Петр',
'surname' => 'Петров'
],
'Бухгалтер' => [
'name' => 'Борис',
'surname' => 'Борисов'
]
];
Нужно его отсортировать по полю «name» по алфавиту. Используем функцию array_multisort().
array_multisort(array_column($arOffice, 'name'), SORT_ASC, SORT_STRING, $arOffice);
Например, мы хотим отсортировать не по алфавиту, а по определенному порядку. Создаем порядок в виде массива:
$sortOffice = [
'Петр',
'Борис',
'Иван',
'Александр'
];
И с помощью функции uasort() сортируем наши данные:
uasort($arOffice, function($a, $b) use ($sortOffice) {
return array_search($a['name'], $sortOffice) - array_search($b['name'], $sortOffice);
});
Функция uasort() сохраняет ключи, в отличие от usort().
array_multisort(array_keys($arOffice), SORT_ASC, SORT_STRING, $arOffice);
Массив с порядком:
$sortKeyOffice = [
'Программист',
'Дизайнер',
'Менеджер',
'Бухгалтер'
];
Сама сортировка:
uksort($arOffice, function($a, $b) use ($sortKeyOffice) {
return array_search($a, $sortKeyOffice) - array_search($b, $sortKeyOffice);
});