У меня есть простое дерево базы данных с parentid, и я хочу прочитать db и получить массив, подобный выше
Array ( Title: Category 1 Children => Array ( => Title: Category 1.1 => Title: Category 1.2 Children => Array ( => Title: Category 1.2.1 ) ) )
Я пытаюсь реализовать с помощью кода выше
function getTree($rootid) { $result = =mysql_query("select * from tree where parentid='$rootid'"); while ($row = mysql_fetch_array($result)) { $arr[]=$row["Title"]; getChilds($row["id"]); } } function getChilds($id) { $result = =mysql_query("select * from tree where parentid='$id'"); while ($row = mysql_fetch_array($result)) { //childers nodes here $arr[]=$row["Title"]; getChilds($row["id"]); } } }
У меня есть проблема с тем, как передать массив функции рекурсии, чтобы продолжить работу с дочерними элементами из последнего узла, который я написал, и так далее.
Его реализация внутри класса, и я знаю, что должен пройти как & $ arr, но я не уверен, как
Любая помощь оценивается
благодаря
Попробуйте что-то вроде этого:
<?php function getTree($rootid) { $arr = array(); $result = mysql_query("select * from tree where parentid='$rootid'"); while ($row = mysql_fetch_array($result)) { $arr[] = array( "Title" => $row["Title"], "Children" => getTree($row["id"]) ); } return $arr; } ?>
Как указано здесь , использование модели списка смежности не является хорошим подходом. Вам лучше использовать обход дерева предзаказов .
Зачем? Послушайте, большую часть времени (читай: в 99,99% случаев), узким местом вашего приложения будет база данных. Предпросмотр дерева обхода действительно выглядит более сложным (главным образом потому, что он не моделируется после ваших данных в «естественном» состоянии, рекурсивно), но вам нужно только отправить запрос один раз, и все готово. Кроме того, в 99% случаев использования ваше приложение будет отображать только дерево, а не изменять / изменять его.