1

私は再帰関数を使用してコードイグナイターでマルチレベルナビゲーションスキームをエコーし​​ていますエコーは問題ありませんが、その出力を1つの変数に結合し、関数が呼び出された場所から返したいのですが、ここで私のコードを助けてください


    function parseAndPrintTree($root, $tree)
    {
        if(!is_null($tree) && count($tree) > 0) 
                {
                echo 'ul';
                foreach($tree as $child => $parent) 
                    {
                    if($parent->parent == $root) 
                        {
unset($tree[$child]); echo 'li'; echo $parent->name; parseAndPrintTree($parent->entity_id, $tree); echo 'li close'; } } echo 'ul close'; } }

4

2 に答える 2

3

これを試してください:

function parseAndPrintTree($root, $tree)
{
    $output = '';

    if(!is_null($tree) && count($tree) > 0) 
        {
                $output .= 'ul';
                foreach($tree as $child => $parent) 
                    {
                    if($parent->parent == $root) 
                        {

                        unset($tree[$child]);
                        $output .=  'li';
                        $output .= $parent->name;
                        $output .= parseAndPrintTree($parent->entity_id, $tree);
                        $output .= 'li close';
                        }
                    }
                $output.= 'ul close';
    }

    return $output;
}
于 2012-08-01T08:12:45.570 に答える
0

を使用して文字列を作成するだけです。連結記号(NB = nowの間にスペースはありません!)

function parseAndPrintTree($root, $tree)
{
    if(!is_null($tree) && count($tree) > 0) 
            {
            $data = 'ul';
            foreach($tree as $child => $parent) 
                {
                if($parent->parent == $root) 
                    {

                    unset($tree[$child]);
                    $data .= 'li';
                    $data .= $parent->name;
                    parseAndPrintTree($parent->entity_id, $tree);
                    $data .= 'li close';
                    }
                }
            $data .= 'ul close';
    }
return $data;
}

// then where you want your ul to appear ...
echo parseAndPrintTree($a, $b);

より適切な名前はtreeToUl()または同様のものであり、このコードに対するあなたの意図がより適切であることを示します(htmlの順序付けられていないリスト?)

次のように行末を追加することで、HTML出力を読みやすくすることもできます。

$data .= '</ul>' . PHP_EOL;
于 2012-08-01T08:12:56.730 に答える