3

カスタムCMSのデータベース内のすべてのページを取得しています。ページはネストされており、親ページの子を検索するためのparent_idがあります。

コードを取得するためのコードは次のとおりです。

public function get_nested ()
{
    $pages = $this->db->get( 'pages' )->result_array();

    $array = array();
    foreach ( $pages as $page )
    {
        if ( !$page['parent_id'] )
        {
            $array[$page['id']] = $page;
        }
        else
        {
            $array[$page['parent_id']]['children'][] = $page;
        }
    }

    return $array;
}

何らかの理由で、else条件が$ array [$page['parent_id']]で機能していません。

$pagesのダンプは私に与えます

Array
(
    [0] => Array
        (
            [id] => 1
            [title] => Homepage
            [slug] => /
            [order] => 1
            [body] => Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do     eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat.
            [parent_id] => 0
        )

    [1] => Array
        (
            [id] => 3
            [title] => Contact
            [slug] => contact
            [order] => 0
            [body] => <p>This is my contact page.</p>
            [parent_id] => 4
        )

    [2] => Array
        (
            [id] => 4
            [title] => About
            [slug] => about
            [order] => 0
            [body] => <p>All about our company.</p>
            [parent_id] => 0
        )

)

ですから、条件の他の部分に連絡先が表示されることを期待しています。条件で「parent」と「child」をエコーし​​ようとしましたが、機能しますが、$ array [$ page ['parent_id']]を書き込むと、何も表示されず、空であることを示すブロックも表示されません。私が現在得ている応答は次のとおりです。

Array
(
    [1] => Array
        (
            [id] => 1
            [title] => Homepage
            [slug] => /
            [order] => 1
            [body] => Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do     eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat.
            [parent_id] => 0
        )

    [4] => Array
        (
            [id] => 4
            [title] => About
            [slug] => about
            [order] => 0
            [body] => <p>All about our company.</p>
            [parent_id] => 0
        )

)

$ array [$ page ['parent_id']]が何もしていない理由を誰かが知っていますか?[4]の中に子供たちの配列ができると思いましたが、何もありません。データベース内のparent_idのタイプを確認しましたが、INT(11)であるため、問題が発生することはありません。

前もって感謝します。

4

1 に答える 1

3

配列に子を設定します。しかし、このコードには1つのバグがあります。親の前に子が表示される場合、最初に子を設定しますが、次の条件で子の後に親が表示される場合、$arrayを上書きします。

if ( !$page['parent_id'] )
{
    $array[$page['id']] = $page;
}

したがって、すでに設定されている子は保持されません。

あなたはこのようなことをしなければなりません:

if ( !$page['parent_id'] )
{
    if(!isset($array[$page['id']]))
        $array[$page['id']] = $page;
    else
       $array[$page['id']] = array_merge($page,$array[$page['id']]);
}

それは子供たちを保護します。それがうまくいくかどうか教えてください。


更新:上記の条件でプログラムを実行しようとしました...次のような出力が得られます:

array
  1 => 
    array
      'id' => int 1
      'title' => string 'homepage' (length=8)
      'parent_id' => int 0
  4 => 
    array
      'id' => int 4
      'title' => string 'about' (length=5)
      'parent_id' => int 0
      'children' => 
        array
          0 => 
            array
              'id' => int 3
              'title' => string 'contact' (length=7)
              'parent_id' => int 4
于 2013-03-01T18:26:57.433 に答える