0

$tree 配列をループアウトしたいのですが、子がある場合は class='parent' を li に追加し、ない場合はデフォルトのスタイル (li) を使用します。すべての子 li から the and ul ラベルを追加します。

print_r($tree)結果は

Array
(
[0] => stdClass Object
(
[tid] => 6
[vid] => 2
[name] => parent one
[depth] => 0
[parents] => Array
(
[0] => 0
)

)

[1] => stdClass Object
(
[tid] => 14
[vid] => 2
[name] => child one
[depth] => 1
[parents] => Array
(
[0] => 6
)

)

[2] => stdClass Object
(
[tid] => 13
[vid] => 2
[name] => child two
[depth] => 1
[parents] => Array
(
[0] => 6
)

[6] => stdClass Object
(
[tid] => 8
[vid] => 2
[name] =>parent three
[depth] => 0
[parents] => Array
(
[0] => 0
)

結果を次のように出力したい:

<li class='parent'>
<a href="#">parent one</a><span></span>
<ul class='haschild'>
<li><a href="#">child one/a></li>
<li><a href="#">child two</a></li>
</ul>
</li>
<li><a href="">child three</a></li>

次のコードを使用しましたが、上記の必要な html を出力できません。

foreach($tree as $term){
    if($term->depth==0){
        echo "<li class='parent'><a href=''>$term->name</a><span></span>";
    }
    if($term->depth>0){
        echo "<ul><li><a href=''>$term->name</a><li></ul>";
    }
    echo "</li>";
}

上記の出力はひどいものです。どこが間違っているのか、どうすれば修正できますか?

4

2 に答える 2

1

これを試して:

foreach ($tree as $term){
if ($term->depth == 0){
    $children = array();
    foreach ($tree as $term2){
        foreach ($term2->parents as $parent){
            if ($parent == $term->tid){
                $children[] = $term2;
            }
        }
    }

    if (count($children) > 0){
        echo '<li class="parent">';
        echo '<a href="#">' . $term->name . '</a><span></span>';
        echo '<ul class="haschild">';
        foreach ($children as $child){
            echo '<li><a href="#">' . $child->name . '</a></li>';
        }
        echo '</ul>';
        echo '</li>';
    }
    else{
        echo '<li><a href="#">' . $term->name . '</a></li>';
    }
}

}

しかし、上記のこのコードは、深さ<= 1の場合にのみ機能します...より深いツリーの場合は、再帰を行うか、サイクル中に...

于 2012-12-05T16:15:34.887 に答える
0

あなたの問題は、実際にはその配列に親子関係のようなものがないことです。子要素の埋め込み配列はありません。

配列を次のようにします (JSON):

{
   "parents":[
      {
         "name":"parent 1",
         "children":[
            {
               "name":"child 1"
            },
            {
               "name":"child 2"
            }
         ]
      }
   ]
}

次に、最初のレベルの配列アイテム (親) をループし、それぞれの子をループします。

foreach( $parents as $parent )
{
  echo 'parent: ' . $parent['name'] . '<br />';

  foreach( $parent['children'] as $child )
  {
    echo 'child: ' . $child['name'] . '<br />';
  }

}
于 2012-12-05T15:37:16.360 に答える