@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');
  • Вопрос задан
  • 755 просмотров
Решения вопроса 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;
    }
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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