Сортировка массива по родителю

217
21 декабря 2019, 20:20

Нужно отсортировать массив, чтобы дочерние элементы шли сразу после родителя. Сложность в том, что в корне не обязательно будут стоять элементы с parentId = 0, начинаться могут деревья с любого элемента.

function sortByParents(array &$array, $parentId = 0, &$result = [])
{
    foreach ($array as $key => $value) {
        if ($value['parentId'] == $parentId) {
            array_push($result, $value);
            unset($array[$key]);
            $this->sortByParents($array, $value['id'], $result);
        }
    }
    return $result;
}

Как можно доработать функцию?

upd: пример данных

начальный массив:

[
  'id' => 23,
  'parentId' => 21,
],[
  'id' => 25,
  'parentId' => 0,
],[
  'id' => 28,
  'parentId' => 25,
],[
  'id' => 31,
  'parentId' => 22,
],[
  'id' => 32,
  'parentId' => 25,
],[
  'id' => 34,
  'parentId' => 0,
],[
  'id' => 35,
  'parentId' => 0,
],[
  'id' => 37,
  'parentId' => 0,
],[
  'id' => 38,
  'parentId' => 0,
],[
  'id' => 39,
  'parentId' => 40,
],[
  'id' => 40,
  'parentId' => 21,
]

результат:

[
  'id' => 25,
  'parentId' => 0,
],[
  'id' => 28,
  'parentId' => 25,
],[
  'id' => 32,
  'parentId' => 25,
],[
  'id' => 34,
  'parentId' => 0,
],[
  'id' => 35,
  'parentId' => 0,
],[
  'id' => 37,
  'parentId' => 0,
],[
  'id' => 38,
  'parentId' => 0,
],[
  'id' => 23,
  'parentId' => 21,  // выше нет родителя с id = 21
],[
  'id' => 40,
  'parentId' => 21,
],[
  'id' => 39,
  'parentId' => 40,
],[
  'id' => 31,
  'parentId' => 22,  // выше нет родителя с id = 22
]
READ ALSO
НЕ могу вывести цены по убыванию laravel

НЕ могу вывести цены по убыванию laravel

Всем привет, не могу вывести цены по убыванию Мой контроллер

219
Как обновлять файлы на сайте (как на prestashop)?

Как обновлять файлы на сайте (как на prestashop)?

Есть движок prestashopОн умеет скачивать обновления своих плагинов с оффициального сайта

211
SQLSTATE[08001]: [Microsoft][ODBC Driver 11 for SQL Server]TCP Provider

SQLSTATE[08001]: [Microsoft][ODBC Driver 11 for SQL Server]TCP Provider

Пробую подключить laravel к бд на mssql, и получаю вот такую ошибку:

207
Could not find template

Could not find template

Сайт на движке Joomla на странице выдает

221