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

Сортировка многомерного массива PHP. Вложенные массивы. Как отсортировать вложенные массивы по двум параметрам?

Добрый день!

Помогите разобраться с сортировкой.

Я имею массив вида:

Array
	(
    [SOME_RANDOM_INTEGER_VALUE_1] => Array
        (
            [ID] => SOME_RANDOM_INTEGER_VALUE_1
            [SORTING_INFO_ALL_STARS] => Array
                (
                    [0] => 2
                    [1] => 90
                )
		)
    [SOME_RANDOM_INTEGER_VALUE_2] => Array
        (
            [ID] => SOME_RANDOM_INTEGER_VALUE_2
            [SORTING_INFO_ALL_STARS] => Array
                (
                    [0] => 2
                    [1] => 45
                )
		)
    [SOME_RANDOM_INTEGER_VALUE_3] => Array
        (
            [ID] => SOME_RANDOM_INTEGER_VALUE_3
            [SORTING_INFO_ALL_STARS] => Array
                (
                    [0] => 3
                    [1] => 2
                )
		)
    [SOME_RANDOM_INTEGER_VALUE_4] => Array
        (
            [ID] => SOME_RANDOM_INTEGER_VALUE_3
            [SORTING_INFO_ALL_STARS] => Array
                (
                    [0] => 3
                    [1] => 1
                )
		)
    [SOME_RANDOM_INTEGER_VALUE_5] => Array
        (
            [ID] => SOME_RANDOM_INTEGER_VALUE_3
            [SORTING_INFO_ALL_STARS] => Array
                (
                    [0] => 1
                    [1] => 0
                )
		)
)


И мне необходимо преобразовать его в следующий:

Array
	(
    [SOME_RANDOM_INTEGER_VALUE_3] => Array
        (
            [ID] => SOME_RANDOM_INTEGER_VALUE_3
            [SORTING_INFO_ALL_STARS] => Array
                (
                    [0] => 3
                    [1] => 2
                )
		)
    [SOME_RANDOM_INTEGER_VALUE_4] => Array
        (
            [ID] => SOME_RANDOM_INTEGER_VALUE_3
            [SORTING_INFO_ALL_STARS] => Array
                (
                    [0] => 3
                    [1] => 1
                )
		)
    [SOME_RANDOM_INTEGER_VALUE_1] => Array
        (
            [ID] => SOME_RANDOM_INTEGER_VALUE_1
            [SORTING_INFO_ALL_STARS] => Array
                (
                    [0] => 2
                    [1] => 90
                )
		)
    [SOME_RANDOM_INTEGER_VALUE_2] => Array
        (
            [ID] => SOME_RANDOM_INTEGER_VALUE_2
            [SORTING_INFO_ALL_STARS] => Array
                (
                    [0] => 2
                    [1] => 45
                )
		)
    [SOME_RANDOM_INTEGER_VALUE_5] => Array
        (
            [ID] => SOME_RANDOM_INTEGER_VALUE_3
            [SORTING_INFO_ALL_STARS] => Array
                (
                    [0] => 1
                    [1] => 0
                )
		)
)


SOME_RANDOM_INTEGER_VALUE_* - это ID позиции, может принимать практически любые значения.

Пробую отсортировать массивы по двум параметрам:

1) [SOME_RANDOM_INTEGER_VALUE_*][SORTING_INFO_ALL_STARS][0] - значение первой сортировки (от большего к меньшему);
2) [SOME_RANDOM_INTEGER_VALUE_*][SORTING_INFO_ALL_STARS][1] - от большего к меньшему, но, расставить их в общем массиве необходимо уже, в зависимости от [SORTING_INFO_ALL_STARS][0]

То есть, например, так:
[3][3] , [3][2] , [2][3] , [2][0] , [1][4] , [1][3] , [1][2] и т.п.

Пробовал разобраться с помощью usort и array-multisort, к сожалению, безуспешно. Не могу понять, как получение значение [SORTING_INFO_ALL_STARS], обойдя [SOME_RANDOM_INTEGER_VALUE_*], но при это переместить [SOME_RANDOM_INTEGER_VALUE_*] выше или ниже...

Как по мне такая сортировка достаточна специфична и не хотелось бы создавать отдельный массив с ID элемента и значением свойства и сортировать этот массив...
  • Вопрос задан
  • 2758 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Я правильно понимаю, что вам нужно что-то вроде этого?:

usort($array, function ($a, $b) {
    return strcmp(
        implode($a['SORTING_INFO_ALL_STARS']), 
        implode($b['SORTING_INFO_ALL_STARS'])
    );
});
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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