2011-11-22 21 views
-1

以下の関数は、配列を完全に間違って配置します。あなたは、次の機能に間違ったコードを気づいたことがありますか?PHPのツリー配列からの親子ナビゲーションの生成

function buildHtmlList($array) 
{ 
    $maxlevel = 0; 

    foreach ($array as $key => $value) 
    { 
     $previousparent = isset($array[$key - 1]['parent']) ? $array[$key - 1]['parent'] : null; 
     $nextparent = isset($array[$key + 1]['parent']) ? $array[$key + 1]['parent'] : null; 

     if ($value['parent'] != $previousparent) 
     { 
      echo "\n<ul>"; 
      ++$maxlevel; 
     } 

     echo "\n<li>" . $value['name']; 

     if ($nextparent == $value['parent']) 
      echo "</li>"; 
    } 

    for ($i = 0; $i < $maxlevel; ++$i) 
    { 
     echo "\n</li>\n</ul>"; 
    } 
} 
+0

可能重複[?私は、階層ツリーに親子関係のシリーズを変換することができますどのように] (http://stackoverflow.com/questions/2915748/how-can-i-convert-a-series-of-parent-child-relationships-into-a-hierarchical-tre) – jeroen

答えて

0

これは、配列が完全に間違って配置しています。あなたは、次の機能に間違ったコードを気づいたことがありますか?

間違った点は、機能の論理全体です。あなたは配列をフラットなリストとして扱いますが、それはツリーを表示したいのです。

フラットリストをツリーとして表示できないため、フラットリストを最初にツリーに変更してから、ツリーを表示する関数を記述する必要があります。

フラットアレイをツリー/多次元に変換する方法の例はin a previous answerです。

+0

私はhttp: //codepad.viper-7.com/IUUDC4は私の場合にどのように見えるかを理解することができません。私の配列の構造は例とは異なります – heron

+0

あなたの質問にサンプル配列を追加してください(どうしてそれを削除しましたか?)次にこれを説明する必要があります。 – hakre

0

は($arrayはあなたの例のようにフォーマットされた)このような何かを試してみてください:

$corrected_array = array(); 
// This loop groups all of your entries by their parent 
foreach($array as $row) 
{ 
    $corrected_array[ $row['parent'] ][] = $row['name']; 
} 

// This loop outputs the children of each parent 
foreach($corrected_array as $parent => $children) 
{ 
    echo '<ul>'; 
    foreach($children as $child) 
    { 
     echo '<li>' . $child . '</li>'; 
    } 
    echo '</ul>'; 
} 

Demo

+0

ここでli要素のIDはどこですか?親子構造体はどこですか? – heron

+0

どのIDですか?あなたのサンプル配列には、要素ごとに2つの項目、 "parent"と "row"があります。親/子構造は私のデモの出力ではっきりとしています... – nickb

関連する問題