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. :)

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top