Сортировка многомерного массива (php)

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *