Frage

Ich benutze die jQuery verschachtelbares Plugin in einem Projekt. Wenn ein Listenelement verschoben wird, serialisiere ich das Array und speichere es in meinem DB. Ich habe Probleme, die HTML -Liste aus dem PHP -Array neu zu erstellen. Wahrscheinlich, weil es spät ist. :)

Ich habe das folgende PHP -Array:

Array
(
    [list_4] => root
    [list_3] => 4
    [list_1303966373] => 3
    [list_1] => 1303966373
    [list_5] => 1
    [list_2] => 1
    [list_6] => root
)

Es sollte eine Liste so etwas wie ...

<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>

(Ignorieren Sie die Werte, sie sind nur für die Show da.)

Die HTML -Liste könnte eine Tiefe von verschachtelten Listen haben.

Mein Gehirn ist tot und ich kann es nicht zum Laufen bringen. Hat jemand einen Vorschlag? Ich werde dir Kekse für die Ewigkeit schulden. Auch ein Schloss.

Vielen Dank. :)

War es hilfreich?

Lösung

Hier haben Sie es (mit Ihrem Beispiel in Ordnung getestet):

<?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);

?>

Ich will meinen Keks! Hehe. Ich hoffe es hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top