多维数组

时间:2010-02-02 06:33:11

标签: codeigniter

以下行的含义是什么:
$data[0][$row->parentid]['children'][$row->id] = $row->name

从功能:

function getCategoriesNav(){
    $data = array();

    $this->db->select('id,name,parentid');
    $this->db->where('status', 'active');
    $this->db->orderby('parentid','asc');
    $this->db->orderby('name','asc');
    $this->db->groupby('parentid,id');
    $Q = $this->db->get('categories');
    if ($Q->num_rows() > 0){
        foreach ($Q->result() as $row){
            if ($row->parentid > 0){
                $data[0][$row->parentid]['children'][$row->id] = $row->name;
            }
            else{
                $data[0][$row->id]['name'] = $row->name;
            }
        }
    }
    $Q->free_result(); 
    return $data; 
}

孩子们来自哪里,其含义是什么:
$row->parentid or $row->name
我的桌子上没有任何“儿童”字段,也没有在任何地方宣布。请帮忙

提前谢谢你, Mehdy


更新

很抱歉,如果我没有清楚地解释这个问题。我的问题是:这个函数中以下行的含义是什么 $data[0][$row->parentid]['children'][$row->id] = $row->name,这些孩子来自哪里,$row->parentid$row->name实际意味着什么?我的桌子上没有任何字段'儿童',并且没有在任何地方宣布,请帮助我。

谢谢 mehdy

2 个答案:

答案 0 :(得分:1)

阅读代码。如果类别中的行具有父ID,则会将子ID添加到父ID children元素下的数组中。这只是简单地获取结果集并将其转换为层次结构数据结构,从而消除了位置的重复并使其更容易遍历。

更新

具体来说,以下代码行是做什么的:

$data[0][$row->parentid]['children'][$row->id] = $row->name;

您的函数循环查询结果集并检查当前行是否指定了父ID。如果是,它会将哈希附加到数组数组(您的层次结构)。

foreach ($Q->result() as $row) {

您的查询结果是行对象的集合。每个对象似乎都有一个属性,用于在SQL查询中选择的每个列。对于您的SELECT字段:

$this->db->select('id,name,parentid');

我们有:

$row->id
$row->name
$row->parentid

回到原来的代码行:

$data[0][$row->parentid]['children'][$row->id] = $row->name;

这一行正构建一个这样的结构:

Array (
    [0] => Array ( // $data[0]
        [400] => Array ( // $data[0][$row->parentid]
            [children] => Array ( // $data[0][$row->parentid]['children']
                [53] => Animal // these are from [$row->id] = $row->name;
                [54] => Mineral
                [55] => Vegetable
            )
        )

        [401] => Array (
            [children] => Array (
                [4] => Wood
                [6] => Metal
                [2] => Plastic
            )
        )
    )
)

您可以通过删除第一个包装器数组$data[0]来略微简化此结构。所以你要改变代码:

$data[$row->parentid]['children'][$row->id] = $row->name;

这样就改变了结构:

Array (
    [400] => Array ( // $data[$row->parentid]
        [children] => Array ( // $data[$row->parentid]['children']
            [53] => Animal // these are from [$row->id] = $row->name;
            [54] => Mineral
            [55] => Vegetable
        )
    )

    [401] => Array (
        [children] => Array (
            [4] => Wood
            [6] => Metal
            [2] => Plastic
        )
    )
)

我希望这能为您澄清代码。

答案 1 :(得分:0)

它在数组$row->name中添加一个ID为$row->id

的值

所以它的作用是向父节点添加一个子行,当时ID为$row->parentid。如果父项具有子项

,它会遍历循环并将子项添加到父项