0

<div>再帰を使用してサイトのナビゲーションを構築しようとしていますが、タグを適切にネストできないようです。このコードが私がたどるべき道であるかどうかさえわかりませんが、それは始まりです。望ましい出力:

<div class="parent">1</div>
<div class="child">
    <a href="#">1.1</a>
    <a href="#">1.2</a>
    <a href="#">1.3</a>
</div>

<div class="parent">2</div>
<div class="child">
    <a href="#">2.1</a>
    <a href="#">2.2</a>
    <a href="#">2.3</a>
</div>

ここに私のデータベースがあります:

ここに画像の説明を入力

これが私が機能させようとしているコードです:(このコードには多くの作業が必要です)

/* here's the call */
$this->buildNav($array,NULL,false);

private function buildNav($array,$parent,$loop)
{
    $html = '';
    $class = ($loop) ? 'child' : 'parent';
    $tag   = '<div>%s</div>';
    $child = false; 
    foreach($array as $item)
    {
        if($item['parent']===$parent)
        {
            $child = true;
            $html .= '<div>'.$item['category_name'];
            $html .= $this->buildNav($array,$item['category_id'],true);
            $html .= '</div>';
            $html .= '<a href="#">'.$item['category_name'].'</a>';
        }
        if(!$child)
        {
            $tag = '';
        }
    }
    return sprintf($tag,$html);
}

アップデート

シェイプシフターのアドバイスに従って、私は再帰から離れて、関数を呼び出して子を取得しました...美しいアイデア;)コードは次のとおりです。

private function buildNav($array,$parent)
{
    $html = '';
    foreach($array as $item)
    {
        if($item['parent'] === NULL)
        {
            $html .= '<div class="parent">'.$item['category_name'].'</div>';
            $html .= '<div class="child">'.$this->getChildren($array,$item['category_id']).'</div>';
        }
    }
    return $html;
}
private function getChildren($array,$parent)
{
    $html = '';
    foreach($array as $item)
    {
        if($item['parent']===$parent)
        {
            $html .= '<a href="#">'.$item['category_name'].'</a>';
        }
    }
    return $html;
}

このような深遠な代替案や方向性を提供してくれた他の人たちにもう一度感謝します;)

4

0 に答える 0