質問

私はjqueryを使用しています NestedSortableプラグイン プロジェクトで。リストアイテムが移動すると、配列をシリアル化してDBに保存します。 PHPアレイからHTMLリストを再作成するのに問題があります。おそらく遅れているからでしょう。 :)

次の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リストには、ネストされたリストの任意の深さがあります。

私の脳は死んでいて、私はそれを機能させることができません。誰かが提案をしていますか?私はあなたに永遠にクッキーを借りています。また、城。

ありがとう。 :)

役に立ちましたか?

解決

ここにあなたがそれを持っている(あなたのサンプルでOKされたテスト):

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

?>

クッキーが欲しい! hehe。それが役に立てば幸い。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top