Есть массив, первый параметр id, второй parent id и текст
$arr = array(
array(1, 1, "Comment 1"),
array(2, 1, "Comment 2"),
array(3, 2, "Comment 3"),
array(4, 1, "Comment 4"),
array(5, 2, "Comment 5"),
array(6, 3, "Comment 6"),
array(7, 7, "Comment 7")
);
А результат должен быть таким
Comment 1
Comment 2
Comment 3
Comment 6
Comment 5
Comment 4
Comment 7
Второй день пытаюсь решить и все мои решения дают один результат, вывод под parent_id соответствующий комментарий, но порядок тогда меняется или бесконечная рекурсия
Если перестроить массив по-другому, будет гораздо проще
$res = [];
foreach($arr as $i) {
if ($i[0] == $i[1]) $i[1] = 0;
$res[$i[1]][] = [ $i[0], $i[2] ];
}
makeTree($res);
function makeTree($arr, $root = 0) {
echo "<ul>\n";
foreach($arr[$root] as $i) {
echo "<li>\n";
echo $i[1];
if (isset($arr[$i[0]])) MakeTree($arr, $i[0]);
echo "</li>\n";
}
echo "</ul>\n";
}
<ul>
<li>
Comment 1<ul>
<li>
Comment 2<ul>
<li>
Comment 3<ul>
<li>
Comment 6</li>
</ul>
</li>
<li>
Comment 5</li>
</ul>
</li>
<li>
Comment 4</li>
</ul>
</li>
<li>
Comment 7</li>
</ul>
demo
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости