1

Web サイトにカテゴリ システムを実装しようとしています。問題は、カテゴリが子を持つことができることです。これまでのところ、私のテーブルcategoryは次のようになります。

id, name, parent_id

ここまでループを作ってみましたが、2段分しか動きません。これが私のコードです:

for($i=0;$i<count($data);$i++){
    $tree[$data[$i]->name] = array();
    for($j=0;$j<count($data);$j++){
        if($data[$j]->parent_id == $data[$i]->id){
            $tree[$data[$i]->name][] = $data[$j]->name;
        }
    }
}

それは私に配列を返します:

Array
(
    [0] => Array
        (
            [1] => Cat1
            [children] => Array
                (
                    [12] => sub cat 1
                    [13] => sub cat 2
                    [14] => sub cat 3
                )

        )

    [1] => Array
        (
            [2] => Cat2
        )

    [2] => Array
        (
            [3] => Cat3
        )
)

次のようなものを効率的かつ再帰的にするにはどうすればよいですか。

Array
(
    [0] => Array
        (
            [1] => Cat1
            [children] => Array
                (
                    [12] => sub cat 1
                    [13] => sub cat 2
                    [14] => sub cat 3
                        [children] => Array
                            (
                                [1] => sub sub cat 1
                            )
                )

        )

    [1] => Array
        (
            [2] => Cat2
        )

    [2] => Array
        (
            [3] => Cat3
        )
)

ご協力いただきありがとうございます

編集

私はZendに取り組んでおり、それは私をそのまま返しますdata:

Zend_Db_Table_Rowset Object
(
    [_data:protected] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [name] => Cinema
                    [type] => category
                    [slug] => cinema
                    [parent_id] => -1
                )

            [1] => Array
                (
                    [id] => 2
                    [name] => Horror
                    [type] => category
                    [slug] => horror
                    [parent_id] => 1
               )
4

3 に答える 3

2

このタイプの構造を適用する場合はchild、親 ID を持つ他のテーブルで使用するのが最適foreign key. です。これにより、再帰的なカテゴリの投稿が可能になります。したがって、テーブル構造は次のようになります

ch_id, parent_id, child
于 2013-04-04T08:58:02.200 に答える
0

ネストされたセットを確認する必要があります。これは、リレーショナル データベースの内外で日付ツリーを格納および取得する方法です (実際のカテゴリとは)。このためには、データベース スキームを少し調整する必要があります (リンクまたはネストされたセットに関するいくつかのチュートリアルで説明されているように)。PHP の場合、ネストされたセット機能を提供するライブラリがいくつかあります。たとえば、このリストです。

于 2013-04-04T08:58:10.057 に答える