Помогите разобраться в выводе древовидных комментариев.
Можешь разжевать дураку по поводу древовидных комментариев. не могу никак вникнуть в массивы.
Вот я делаю запрос (будем работать пока только с id)
таблица
id text answer
Select id from comments where answer = 0 order by id desc limit 5
создаю массив
$comm = array();
while ($row = ....)
$comm[$row['id']] = $row;
Получаю на выходе 5 комментариев
Далее мне нужно выбрать другие комментарии которые относятся к родителю
Select id from comments where id in (" . join(", ", array_keys($comm)) . ")
создаю массив
$treecomm = array();
while ($row = ...)
$treecomm[$row['id']] = $row;
А как теперь через foreach это все собрать? Т.е на выходе получить 5 родителей и под каждым все их потомки?
Можешь разжевать дураку по поводу древовидных комментариев. не могу никак вникнуть в массивы.
Вот я делаю запрос (будем работать пока только с id)
таблица
id text answer
Select id from comments where answer = 0 order by id desc limit 5
создаю массив
$comm = array();
while ($row = ....)
$comm[$row['id']] = $row;
Получаю на выходе 5 комментариев
Далее мне нужно выбрать другие комментарии которые относятся к родителю
Select id from comments where id in (" . join(", ", array_keys($comm)) . ")
создаю массив
$treecomm = array();
while ($row = ...)
$treecomm[$row['id']] = $row;
А как теперь через foreach это все собрать? Т.е на выходе получить 5 родителей и под каждым все их потомки?
id 1 answer 0
--id 2 answer 1
--id 3 answer 1
id 4 answer 0
--id 5 answer 4
У вас есть табличка с полями:
id — идентификатор записи
parent_id — идентификатор родителя
data — какие-нибудь данные
Допустим, мы хотим построить из этого дерево. Понятно, что элементы массива могут иметь только одно значение, хоть оно и может быть массивом. Поэтому придётся как-то разделять данные самого элемента и список его потомков. Например, так:
array (
1 => array (
'data' => 'данные какие-нибудь',
'subitems' => array (
2 => array (
'data' => 'какие-нибудь данные',
'subitems' => array(),
),
),
),
)
гы, наткнулся на ограничение размера сообщения…
Код, выводящий дерево из маркированных HTML-списков может выглядеть так:
function renderTree($tree){
// начало списка
echo '<ul>';
foreach ($tree as $node){
// начало элемента списка
echo '<li>';
// выводим данные
echo '<div>' . $node['data'] . '</div>';
// если есть потомки, проходим по ним этой же функцией
if (isset($node['subitems'])){
renderTree($node['subitems']);\
}
// конец элемента списка
echo '</li>';
}
// конец списка
echo '</ul>';
}
P.S. Я там случайно символ лишний вставил в конце строки, где функция вызывает саму себя.
array (
1 => array (
'data' => 'данные какие-нибудь',
'subitems' => array (
2 => array (
'data' => 'какие-нибудь данные',
'subitems' => array(),
),
),
),
)
Дык писать то начал но вот не получается пока...
в первый попадает родитель а во второй все дети родителя.
Теперь нужно объединить родителя и детей и создать зависимость.. а вот как не могу понять.
$tree[(int)$row['parent_id']]['subitems'][(int)$row['id']] = $row;