Array中的嵌套页面 - PHP

时间:2013-03-01 18:00:57

标签: php arrays

我正在检索数据库中所有自定义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
        )

)

所以我希望联系人出现在条件的其他部分。我试过在条件中回应'父'和'孩子'并且它有效但是当写$ 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),所以不应该创建问题。

提前致谢。

1 个答案:

答案 0 :(得分:3)

它将在您的数组中设置子项..但此代码有一个错误。当孩子出现在它的父母之前时,它会先设置孩子,但是当父母出现在以下情况下的孩子之后,你会覆盖$数组。

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