Задать вопрос
@sibspace

Как отсортировать массив значениями другого массива (php)?

Мне необходимо отсортировать массив по значениям другого массива, где массивы разной длины.

Массив (получен по LDAP), который необходимо отсортировать по должности(title) согласно второму массиву.
Первый массив:

Array
(
    [0] => 9
    [1] => Array
        (
            [cn] => Array
                (
                    [count] => 1
                    [0] =>Иванов Иван Иванович
                )

            [0] => cn
            [sn] => Array
                (
                    [count] => 1
                    [0] =>Иванов
                )

            [1] => sn
            [title] => Array
                (
                    [count] => 1
                    [0] => Руководитель
                )

            [2] => title
            [physicaldeliveryofficename] => Array
                (
                    [count] => 1
                    [0] => 7-02
                )

            [3] => physicaldeliveryofficename
            [telephonenumber] => Array
                (
                    [count] => 1
                    [0] => 22-22-22
                )

            [4] => telephonenumber
            [givenname] => Array
                (
                    [count] => 1
                    [0] => Иван
                )

            [5] => givenname
            [streetaddress] => Array
                (
                    [count] => 1
                    [0] => Адрес
                )

            [6] => streetaddress
            [useraccountcontrol] => Array
                (
                    [count] => 1
                    [0] => 512
                )

            [7] => useraccountcontrol
            [mail] => Array
                (
                    [count] => 1
                    [0] => ivanoviv@mail.local
                )
        )

    [2] => Array
        (
            [cn] => Array
                (
                    [count] => 1
                    [0] => Петров Петр Петрович
                )

            [0] => cn
            [sn] => Array
                (
                    [count] => 1
                    [0] => Петров
                )

            [1] => sn
            [title] => Array
                (
                    [count] => 1
                    [0] => Заместитель руководителя
                )

            [2] => title
            [physicaldeliveryofficename] => Array
                (
                    [count] => 1
                    [0] => 2-03
                )

            [3] => physicaldeliveryofficename
            [telephonenumber] => Array
                (
                    [count] => 1
                    [0] => 33-33-33
                )

            [4] => telephonenumber
            [givenname] => Array
                (
                    [count] => 1
                    [0] => Петр
                )

            [5] => givenname
            [streetaddress] => Array
                (
                    [count] => 1
                    [0] => Адрес
                )

            [6] => streetaddress
            [useraccountcontrol] => Array
                (
                    [count] => 1
                    [0] => 512
                )

            [7] => useraccountcontrol
            [mail] => Array
                (
                    [count] => 1
                    [0] => PetrPP@mail.local
                )
      )

    [3] => Array
        (
            [cn] => Array
                (
                    [count] => 1
                    [0] => Сидоров Сидор Сидорович
                )

            [0] => cn
            [sn] => Array
                (
                    [count] => 1
                    [0] =>Сидоров
                )

            [1] => sn
            [title] => Array
                (
                    [count] => 1
                    [0] => Заместитель руководителя
                )

            [2] => title
            [physicaldeliveryofficename] => Array
                (
                    [count] => 1
                    [0] => 3-03
                )

            [3] => physicaldeliveryofficename
            [telephonenumber] => Array
                (
                    [count] => 1
                    [0] => 44-44-44
                )

            [4] => telephonenumber
            [givenname] => Array
                (
                    [count] => 1
                    [0] => Сидор
                )

            [5] => givenname
            [streetaddress] => Array
                (
                    [count] => 1
                    [0] => Адрес
                )

            [6] => streetaddress
            [useraccountcontrol] => Array
                (
                    [count] => 1
                    [0] => 512
                )

            [7] => useraccountcontrol
            [mail] => Array
                (
                    [count] => 1
                    [0] => sidorovss@mail.local
                )         
        )
...........


Второй массив:

$USERGRADE = array(
 'Pуководитель',
 'Заместитель руководителя',
 'Помощник руководителя',
 'Начальник отдела',
 'Заместитель начальника отдела',
 'Главный специалист,
 'Главный специалист 1 категории',
.....
);


Ключ для массива формирую через функцию: array_flip
$sort = array_flip($$USERGRADE );

Подскажите куда копать?
array_column - не поддерживается php5.4

Или подскажите, как объединить эти два массива, чтобы в дальнейшем через usort произвести сортировку. Например:

function usort_title ($a,$b) {
 if($a['title']===$b['title']) return 0;
   return$a['title'] > $b['title'] ? 1: -1;
}

usort ($massiv_name,'usort_title');
  • Вопрос задан
  • 820 просмотров
Подписаться 2 Средний 2 комментария
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
Решение "в лоб": пройтись по второму массиву и во вложенном цикле выбрать нужные элементы из первого.
$sorted_ldap_array = [];
foreach ($USERGRADE as $grade) {
  foreach ($ldap_array as $item) {
    if (isset($item['title'][0]) && $item['title'][0] == $grade) {
      $sorted_ldap_array[] = $item;
    }
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽