PHP - Массивы рекурсивной сортировки по значению - PullRequest
0 голосов
/ 17 апреля 2020

У меня большой массив, например:

Array
(
    [1] => Array
        (
            [ID] => 1
            [name] => Product 1
            [productorder] => 7
            [children] => Array
                (
                    [1] => Array
                        (
                            [ID] => 54
                            [name] => Product 1.1
                            [productorder] => 4
                        )

                    [2] => Array
                        (
                            [ID] => 8
                            [name] => Product 1.2
                            [productorder] => 2
                        )
                )
        )
    [2] => Array
        (
            [ID] => 2
            [name] => Product 2
            [productorder] => 1
        )
    [3] => Array
        (
            [ID] => 3
            [name] => Product 3
            [productorder] => 5
        )
)

Мне нужно изменить порядок расположения всех массивов на значение productorder. Он должен быть рекурсивным с помощью ключа «children», но некоторые массивы не могут иметь этот ключ. Я попытался из этой топи c:

usort($myArray, function($a, $b) {
    return $a['order'] - $b['order'];
});

, но это не рекурсивно! Есть идеи?

1 Ответ

0 голосов
/ 17 апреля 2020

Создать функцию recSortByKey и рекурсивно вызвать функцию на входе children, если имеется -

function recSortByKey($key = "", $arr = []) {
  // flat
  usort($arr, function($a, $b) {
    return $a[$key] - $b[$key];
  });
  // nested
  if (array_key_exists("children", $arr) && count($arr["children"])) {
    recSortByKey($key, $arr["children"])
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...