PHP Array к упорядоченному и вложенному списку HTML
-
25-10-2019 - |
Вопрос
Я использую jQuery Вложенный съемный плагин в проекте. Когда элемент списка перемещается, я сериализую массив и сохраняю его до своего БД. У меня проблемы с воссозданием списка HTML из массива PHP. Наверное, потому что уже поздно. :)
У меня есть следующий массив PHP:
Array
(
[list_4] => root
[list_3] => 4
[list_1303966373] => 3
[list_1] => 1303966373
[list_5] => 1
[list_2] => 1
[list_6] => root
)
Это должно составить список что -то вроде ...
<ol>
<li id='list_4'>value 4
<ol>
<li id='list_3'>value 3
<ol>
<li id='list_1303966373'>value 1303966373
<ol>
<li id='list_1'>value 1
<ol>
<li id='list_5'>value 5</li>
<li id='list_2'>value 2</li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
<li id='list_6'>value 6</li>
</ol>
(Игнорируйте значения, они просто там для шоу.)
Список HTML может иметь любую глубину вложенных списков.
Мой мозг мертв, и я не могу заставить его работать. У кого -нибудь есть предложение? Я обязан вам куки на вечность. Кроме того, замок.
Спасибо. :)
Решение
Здесь у вас есть (проверено хорошо с помощью вашего образца):
<?php
$tree = array(
"list_4" => "root",
"list_3" => "list_4",
"list_1303966373" => "list_3",
"list_1" => "list_1303966373",
"list_5" => "list_1",
"list_2" => "list_1",
"list_6" => "root",
);
function getChildrenLists($tree){
$tree2 = array();
foreach($tree as $child => $parent){
if(!array_key_exists($parent, $tree2)) $tree2[$parent] = array();
$tree2[$parent][] = $child;
}
return $tree2;
}
function renderTree($tree2, $parent = "root"){
if($parent != "root") echo "<li id='$parent'> value $parent\n";
$children = $tree2[$parent];
if(count($children) > 0){ //If node has children
echo "<ol>\n";
foreach($children as $child)
renderTree($tree2, $child);
echo "</ol>\n";
}
if($parent != "root") echo "</li>\n";
}
$tree2 = getChildrenLists($tree);
renderTree($tree2);
?>
Я хочу печенье! Хе -хе. Надеюсь, поможет.
Не связан с StackOverflow