У меня БД вот так:
id text parent
1 Parent 1 0
2 Child of 1 1
3 Sibling 1
4 Another Parent 0
5 A first child 4
Итак, я пытаюсь зафиксировать древовидную структуру, перечисляя родителей. Я знаю о другом варианте (вложенные множества, я думаю?), Но сейчас я буду придерживаться этого. Я сейчас пытаюсь получить данные из БД и в структуру вложенного массива в PHP. У меня есть такая функция:
class Data_Manager
{
public $connection = '';
public $collection = array();
function __construct() {
$this->connection = mysql_connect('localhost', 'root', 'root');
$thisTable = mysql_select_db('data');
// error handling truncated
}
function get_all() {
$arr = &$this->collection;
$this->recurseTree('', 0, $arr);
var_dump($arr);
}
function recurseTree($parent, $level, $arrayNode) {
$result = mysql_query('SELECT * FROM tasks WHERE parent="' . $parent . '";');
while ($row = mysql_fetch_array($result)) {
$row['children'] = array(); //where I'd like to put the kids
$arrayNode[$row['id']]= $row;
$this->recurseTree($row['id'], $level+1, $arrayNode[$row['id']]);
}
}
}
Итак, я хотел бы высказать своеобразное вложенное дерево ассоциативных массивов, но я не могу понять, как это сделать. Кажется, что ничего не пишет в массив, который я передаю, и я как бы теряю след в рекурсии. Может ли кто-нибудь помочь мне преодолеть этот последний горб, который приведет к чему-то вроде:
[
Parent1 => [
children => ['Child of 1', 'Sibling']
],
AnotherParent => [
children => ['First Child']
]
]
И меня меньше волнует конкретная форма вывода. Он будет превращен в JSON, и я еще не занимался написанием обработчика на стороне клиента, поэтому не стоит беспокоиться о точной структуре.
Спасибо!