Сортировать массив по максимально возможному значению подмассива - PullRequest
0 голосов
/ 18 октября 2018

У меня есть вопрос, похожий на этот: PHP Sort Array By SubArray Value однако это немного отличается, так как я хочу найти / найти наибольшее из многих значений подмассива и отсортировать "main"массив после этого.Ниже приведена структура массива, которая содержит несколько подэлементов, в которых каждый подэлемент имеет оценку.

Array
(
    [grouping1] => Array
        (
            [0] => Array
                (
                    [_score] => 8.2
                    [_source] => Array
                        (
                            [name] => Subitem 1111,
                            [ID => 999
                        )

                )

        )

    [grouping2] => Array
        (
            [0] => Array
                (
                    [_score] => 8.546042
                    [_source] => Array
                        (
                            [name] => Subitem2222,
                            [ID] => 987654
                        )

                )

        )

    [grouping3] => Array
        (
            [0] => Array
                (
                    [_score] => 10.163501
                    [_source] => Array
                        (
                            [name] => Subitem3333
                            [ID] => 12345

                        )

                )

            [1] => Array
                (
                    [_score] => 8.55
                    [_source] => Array
                        (
                            [name] => Subitem4444,
                            [ID] => 67890
                        )

                )

            [2] => Array
                (
                    [_score] => 9.55
                    [_source] => Array
                        (
                            [name] => Subitem5555
                            [ID] => 65421
                        )

                )

        )

)

Я бы хотел

  1. Проверьтенаивысший балл среди подпунктов для каждой группировки
  2. Сортировка группировок после наивысшего доступного балла подпункта

Ожидаемый вывод - содержащий массив, имеющий этот порядок

  1. [0] grouping3, поскольку его наибольшее значение для подмассива 10.163501
  2. [1] grouping2, так как его максимальное значение для подмассива равно 8.546042
  3. [2] group1, поскольку его максимальное значение для подмассива равно 8,2

1 Ответ

0 голосов
/ 18 октября 2018

Хорошо, это то, что вам нужно сделать - найти max счет в каждом grouping и сохранить подстановку [grouping -> score], затем отсортировать сохраняющие ключи этого поискового массива и построить новый массив:

$lookup = [];
foreach ($source_array as $key => $grouping) {
    $max = 0;
    foreach ($grouping as $item) {
        if ($max < $item['_score']) {
            $max = $item['_score'];
        }
    }
    $lookup[$key] = $max;
}

// sort `$lookup` preserving keys
arsort($lookup);

$sorted_array = [];
foreach ($lookup as $key => $max) {
    $sorted_array[$key] = $source_array[$key];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...