0

次のシナリオで問題が発生しています。カテゴリの配列があるため、カテゴリには子カテゴリを含めることができ、子カテゴリには子カテゴリを無限に含めることができます。今、私が達成しようとしているのは次のとおりですが、これを達成することはできません。

$items私は次の構造の配列を持っています

Array
(
    [0] => Array
        (
            [label] => Main Cat
            [id] => 29
            [parent_id] => 19
        )

    [1] => Array
        (
            [label] => Main Cat
            [id] => 17
            [parent_id] => 19
        )

    [2] => Array
        (
            [label] => Main Cat
            [id] => 20
            [parent_id] => 19
            [items] => Array
                (
                    [0] => Array
                        (
                            [label] => Child Level 1
                            [id] => 21
                            [parent_id] => 20
                        )

                    [1] => Array
                        (
                            [label] => Child Level 1
                            [id] => 22
                            [parent_id] => 20
                            [items] => Array
                                (
                                    [0] => Array
                                        (
                                            [label] => Child Level 2
                                            [id] => 27
                                            [parent_id] => 22
                                            [items] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [label] => Child Level 3
                                                            [id] => 28
                                                            [parent_id] => 27
                                                        )

                                                )

                                        )

                                )

                        )

                    [2] => Array
                        (
                            [label] => Child Level 1
                            [id] => 23
                            [parent_id] => 20
                        )

                    [3] => Array
                        (
                            [label] => Child Level 1
                            [id] => 24
                            [parent_id] => 20
                            [items] => Array
                                (
                                    [0] => Array
                                        (
                                            [label] => Child Level 2
                                            [id] => 25
                                            [parent_id] => 24
                                        )

                                    [1] => Array
                                        (
                                            [label] => Child Level 2
                                            [id] => 26
                                            [parent_id] => 24
                                        )

                                )

                        )

                )

        )

)

ここで、次の配列を各子レベルがインデントされたテーブルに表示する必要があります。子レベル3から子レベル2に1レベル上に移動する必要がある場合は、表示が再び逆になります。

<table border="2" width="100%">
    <tr>
        <td>Main Cat</td>
    </tr>
    <tr>
        <td>Main Cat</td>
    </tr>
    <tr>
        <td>Main Cat</td>
    </tr>
    <tr>
        <td style="margin-left:20px;">Child Level 1</td>
    </tr>
    <tr>
        <td style="margin-left:20px;">Child Level 1</td>
    </tr>
    <tr>
        <td style="margin-left:40px;">Child Level 2</td>
    </tr>
    <tr>
        <td style="margin-left:60px;">Child Level 3</td>
    </tr>
    <tr>
        <td style="margin-left:20px;">Child Level 1</td>
    </tr>
    <tr>
        <td style="margin-left:20px;">Child Level 1</td>
    </tr>
    <tr>
        <td style="margin-left:40px;">Child Level 2</td>
    </tr>
    <tr>
        <td style="margin-left:40px;">Child Level 2</td>
    </tr>
</table>

これまでのところ、私のPHPコードは次のようになっています。

public function renderCategoriesRecursive($items)
        {
                foreach($items as $item)
                {

                        $itemCount = count($item['items']);



                        echo CHtml::openTag('tr');
                            echo CHtml::openTag('td',array('class'=>$class));
                                echo $item['label'];
                            echo CHtml::closeTag('tr');
                        echo CHtml::closeTag('tr');


                        if(isset($item['items']) && $itemCount)
                        {

                                $this->renderCategoriesRecursive($item['items']);

                        }
                }
}

変数$itemsには、上記の配列が含まれています

4

1 に答える 1

1

あなた自身のソリューションが変数$classを参照していることに気づいたので、それも取り入れました。あなたは本当にCHtmlを使う必要はありません(あなたがそうしない限り、しかし私はそのようなケースを見たことがありません)

function renderItems( $array, $class, $indent = 0  ) {

    foreach( $items as $item) {
        echo '<tr><td class="'.$class.'">'.$item['label'].'</td></tr>';

        if( isset( $item['items'] && count( $item['items'] )
            renderItems($item['items'],$class,$indent+1);
    }

}
于 2013-02-11T22:24:10.880 に答える