tableau PHP à la liste HTML ordonnée et emboîtés
-
25-10-2019 - |
Question
J'utilise le jQuery plug-in nestedSortable dans un projet. Lorsqu'un élément de la liste est déplacé, je sérialiser le tableau et l'enregistrer à mon db. Je vais avoir du mal à recréer la liste HTML à partir du tableau PHP. Probablement parce qu'il est tard. :)
Je le tableau PHP suivant:
Array
(
[list_4] => root
[list_3] => 4
[list_1303966373] => 3
[list_1] => 1303966373
[list_5] => 1
[list_2] => 1
[list_6] => root
)
Il devrait faire quelque chose comme la liste ...
<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>
(Ignorer les valeurs, ils sont juste là pour le spectacle.)
La liste HTML pourrait avoir une profondeur de listes imbriquées.
Mon cerveau est mort et je ne peux pas le faire fonctionner. Quelqu'un at-il une suggestion? Je dois vous les cookies pour l'éternité. En outre, un château.
Merci. :)
La solution
Ici, vous avez (testé OK avec votre échantillon):
<?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);
?>
Je veux que mon biscuit! Hehe. Espérons que cela aide.