0

フラットな mysql 行をツリー構造に変えようとしています。カテゴリとサブカテゴリの ID は次のとおりです。

配列 ( [50] => 配列 ( [70] => 配列 ( [0] => 配列 ( [73] => 配列 ( [80] => 配列 ( )

                            )

                        [74] => Array
                            (
                            )

                        [75] => Array
                            (
                            )

                    )

            )

        [71] => Array
            (
                [0] => Array
                    (
                    )

            )

        [72] => Array
            (
                [0] => Array
                    (
                    )

            )

        [73] => Array
            (
                [0] => Array
                    (
                        [80] => Array
                            (
                            )

                    )

            )

        [74] => Array
            (
                [0] => Array
                    (
                    )

            )

        [75] => Array
            (
                [0] => Array
                    (
                    )

            )

        [80] => Array
            (
                [0] => Array
                    (
                    )

            )

    )

[51] => Array
    (
        [76] => Array
            (
                [0] => Array
                    (
                        [77] => Array
                            (
                            )

                    )

            )

        [77] => Array
            (
                [0] => Array
                    (
                    )

            )

        [78] => Array
            (
                [0] => Array
                    (
                        [79] => Array
                            (
                                [81] => Array
                                    (
                                    )

                            )

                    )

            )

        [79] => Array
            (
                [0] => Array
                    (
                        [81] => Array
                            (
                            )

                    )

            )

        [81] => Array
            (
                [0] => Array
                    (
                    )

            )

    )

)

このように出力したい

 <ul id="red" class="treeview-famfamfam">
    <li>50
        <ul> <li> 70 
                <ul><li> 73 <ul> 
                                <li> 80</li></ul>
                    </li>
                    <li> 74</li>
                    <li>75 </li>
                    </ul>
            </li>
            <li>71</li>
            <li> 72</li>
            </ul>
            </li>

基本的に、カテゴリサブカテゴリサブサブ....カテゴリレイスなどのツリーを構築する必要があります。よろしくお願いします

4

1 に答える 1

3

編集:わかりました。これに半日費やしました。申し訳ありませんが、配列の定義を変更する必要があります。リーフ ノードの空の配列の代わりに、任意の値を持つ配列以外の値を使用します...次のように:

$ar=array("50" => array ( "70" => array ( "0" => array("35" => "leaf"),"3"=>"leaf" ) ) );

次に、これを使用します。

function MakeTree($array){
    $return="";

        if(!is_array($array)) return;
        while($member=current($array)){     

                $return.="<li>".key($array);
                $return.="<ul>".MakeTree($member)."</ul></li>";

            next($array);           
         }       
        return $return;
    }

    $ar=array("50" => array ( "70" => array ( "0" => array("35" => "leaf"),"3"=>"leaf" ) ) );
    echo(MakeTree($ar));

理由はわかりませんが、葉ノードに null または空の配列値がある場合、next($array) によってアクセスされません。空の文字列であっても、"35"=>"" は機能しません。

next() と current() を使わないと key() が使えないので、構造の変更は避けられません。

于 2012-11-15T14:14:42.193 に答える