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

214
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

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

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

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

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

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

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

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

200
Could not find template

Could not find template

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

216