Задать вопрос
@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');
  • Вопрос задан
  • 818 просмотров
Подписаться 2 Средний 2 комментария
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    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;
    }
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы