Как создать многомерный массив с неограниченной глубиной по мере необходимости из следующего набора результатов «родитель-потомок» - PullRequest
0 голосов
/ 28 марта 2019

У меня есть следующий набор результатов

results obtained from a query

Мне нужно создать такой массив

array(11) {
  ["Science & engineering"]=>
  array(3) {
    ["Physics"]=>
    array(1) {
      ["Work & energy"]=>
      array(0) {
      }
    }
    ["Chemistry"]=>
    array(0) {
    }
    ["Biology"]=>
    array(0) {
    }
  }
  ["Computing"]=>
  array(0) {
  }
  ["Arts & humanities"]=>
  array(0) {
  }
  ["Math"]=>
  array(0) {
  }
  ["Economics & finance"]=>
  array(0) {
  }
  ["Business"]=>
  array(0) {
  }
  ["Personal development"]=>
  array(0) {
  }
  ["Lifestyle"]=>
  array(0) {
  }
  ["Health & fitness"]=>
  array(0) {
  }
  ["Photography"]=>
  array(0) {
  }
}

Как видите, массив всего два уровня. Мне нужно создать массив, который уменьшается до бесконечности, пока есть еще дети и без повторений.

Редактировать: Я также приветствую любые другие эффективные решения этой проблемы. Конечным результатом должно быть наличие списка всех категорий в массиве в иерархическом порядке.

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

На этом сайте есть много примеров рекурсивных функциональных кодов, но почти все они начинаются с дочерних элементов и вплоть до родителей.В моем случае мне нужно было начать с родителя и пройти весь путь до детей.

Итак, я смог решить эту проблему, написав рекурсивную функцию следующим образом:

            function findParentsParent($result,$category) {
            global $subs;
            foreach ($result as $row) {
                if ($row['childName'] == $category['name']) {
                    $subs[] = $category['childName'];
                    findParentsParent($result,$row);
                    return array_reverse($subs);
                } elseif ($row['childName'] == $category['childName']) {
                    $subs[] = $category['childName'];
                    $subs[] = $category['name'];
                    return array_reverse($subs);
                }
            }
        }
0 голосов
/ 28 марта 2019

пример скрипта, который вы используете для создания массива с 2 lvl ???

Вам придется использовать функцию структуры рекурсии:

<?php
function buildArray(array $elements, $parentId = 0) {
    $branch = array();

    foreach ($elements as $element) {
        if ($element['parent_id'] == $parentId) {
            $children = buildArray($elements, $element['id']); //recursion
            if ($children) {
                $element['children'] = $children;
            }
            $branch[] = $element;
        }
    }

    return $branch;
}

$result= buildArray($rows);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...