Есть таблица сотрудников в виде двумерного массива $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); });