-1

以下のこの形式で HTML ツリーを構築しようとしています。必要なだけ多くのレベルを深くすることができますが、この形式に従う必要があります。

私がデータ ソースとして持っているのは、Magento の API 呼び出しから構築された PHP 配列です。

私のPHP配列は次のようになります...

Array
(
    [category_id] => 1
    [parent_id] => 0
    [name] => Root Catalog
    [is_active] => 
    [position] => 0
    [level] => 0
    [children] => Array
        (
            [0] => Array
                (
                    [category_id] => 2
                    [parent_id] => 1
                    [name] => Default Category
                    [is_active] => 1
                    [position] => 1
                    [level] => 1
                    [children] => Array
                        (
                            [0] => Array
                                (
                                    [category_id] => 263
                                    [parent_id] => 2
                                    [name] => Texas Roadhouse
                                    [is_active] => 1
                                    [position] => 1
                                    [level] => 2
                                    [children] => Array
                                        (
                                        )

                                )

                            [1] => Array
                                (
                                    [category_id] => 265
                                    [parent_id] => 2
                                    [name] => Bubba's
                                    [is_active] => 1
                                    [position] => 2
                                    [level] => 2
                                    [children] => Array
                                        (
                                        )

                                )

                            [2] => Array
                                (
                                    [category_id] => 3
                                    [parent_id] => 2
                                    [name] => Neon Signs
                                    [is_active] => 1
                                    [position] => 3
                                    [level] => 2
                                    [children] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [category_id] => 12
                                                    [parent_id] => 3
                                                    [name] => Custom Neon Signs
                                                    [is_active] => 1
                                                    [position] => 1
                                                    [level] => 3
                                                    [children] => Array
                                                        (
                                                            [0] => Array
                                                                (
                                                                    [category_id] => 257
                                                                    [parent_id] => 12
                                                                    [name] => Animals Custom Neon Signs
                                                                    [is_active] => 0
                                                                    [position] => 1
                                                                    [level] => 4
                                                                    [children] => Array
                                                                        (
                                                                        )

                                                                )

                                                            [1] => Array
                                                                (
                                                                    [category_id] => 258
                                                                    [parent_id] => 12
                                                                    [name] => Bar Beer Cocktails Custom Neon Signs
                                                                    [is_active] => 0
                                                                    [position] => 2
                                                                    [level] => 4
                                                                    [children] => Array
                                                                        (
                                                                        )

                                                                )

PHP 配列を変換する必要がある HTML 出力は、この形式である必要があります...

<div id="tree">
    <ul>
        <li><input type="checkbox"><span>Node 1</span>
            <ul>
                <li><input type="checkbox"><span>Node 1.1</span>
                    <ul>
                        <li><input type="checkbox"><span>Node 1.1.1</span>
                    </ul>
            </ul>
            <ul>
                <li><input type="checkbox"><span>Node 1.2</span>
                    <ul>
                        <li><input type="checkbox"><span>Node 1.2.1</span>
                        <li><input type="checkbox"><span>Node 1.2.2</span>
                        <li><input type="checkbox"><span>Node 1.2.3</span>
                            <ul>
                                <li><input type="checkbox"><span>Node 1.2.3.1</span>
                                <li><input type="checkbox"><span>Node 1.2.3.2</span>
                            </ul>
                        <li><input type="checkbox"><span>Node 1.2.4</span>
                        <li><input type="checkbox"><span>Node 1.2.5</span>
                        <li><input type="checkbox"><span>Node 1.2.6</span>
                    </ul>
            </ul>
        <li><input type="checkbox"><span>Node 2</span>
            <ul>
                <li><input type="checkbox"><span>Node 2.1</span>
                    <ul>
                        <li><input type="checkbox"><span>Node 2.1.1</span>
                    </ul>
                <li><input type="checkbox"><span>Node 2.2</span>
                    <ul>
                        <li><input type="checkbox"><span>Node 2.2.1</span>
                        <li><input type="checkbox"><span>Node 2.2.2</span>
                        <li><input type="checkbox"><span>Node 2.2.3</span>
                            <ul>
                                <li><input type="checkbox"><span>Node 2.2.3.1</span>
                                <li><input type="checkbox"><span>Node 2.2.3.2</span>
                            </ul>
                        <li><input type="checkbox"><span>Node 2.2.4</span>
                        <li><input type="checkbox"><span>Node 2.2.5</span>
                        <li><input type="checkbox"><span>Node 2.2.6</span>
                    </ul>
            </ul>
    </ul>
</div>

これを達成する方法が本当にわかりません。配列を何度も繰り返す必要があることはわかっていますが、これを行う方法がわかりません。誰かが助けてくれれば、あなたの時間と知識に非常に感謝します

4

1 に答える 1

3

再帰関数を使用できます。

function buildTree($data, $parentLevel = "") {
    echo "<ul>";

    $nodeCount = 1;
    foreach ($data as $value) {
        if ($parentLevel != "") {
            $currentLevel = $parentLevel . "." . $nodeCount;
        } else {
            $currentLevel = $nodeCount;
        }

        // Output the list element
        echo "<li><input type=\"checkbox\"><span>Node " . $parentLevel . "</span></li>";

        if (isset($value["children"]) && count($value["children"]) > 0) {
            buildTree($value["children"], $parentLevel . "." . $nodeCount);
        }

        $nodeCount++;
    }
    echo "</ul>";
}
于 2013-10-02T19:35:43.893 に答える