Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Codeigniter 转换从数据库返回的多维数组数据_Codeigniter_Multidimensional Array - Fatal编程技术网

Codeigniter 转换从数据库返回的多维数组数据

Codeigniter 转换从数据库返回的多维数组数据,codeigniter,multidimensional-array,Codeigniter,Multidimensional Array,我在处理多维数组数据时遇到问题。 我加入了两个表(maincategories和categories) 表2主要类别: id,主类别 $this->db->select('m.id, m.name_en AS maincategory') ->select('c.name_en AS category') ->from('categories AS c') ->join('maincat

我在处理多维数组数据时遇到问题。 我加入了两个表(maincategories和categories)

表2主要类别: id,主类别

    $this->db->select('m.id, m.name_en AS maincategory')
            ->select('c.name_en AS category')
            ->from('categories AS c')
            ->join('maincategories AS m', 'c.maincategory_id=m.id', 'left');
    $query = $this->db->get();
表格类别: id,主类别\u id,类别

    $this->db->select('m.id, m.name_en AS maincategory')
            ->select('c.name_en AS category')
            ->from('categories AS c')
            ->join('maincategories AS m', 'c.maincategory_id=m.id', 'left');
    $query = $this->db->get();
这导致下面列出了所有4个类别

[3] => stdClass Object
    (
        [id] => 7
        [maincategory] => Career
        [category] => Business Sales
    )

[4] => stdClass Object
    (
        [id] => 1
        [maincategory] => Accommodation
        [category] => Camping
    )

[5] => stdClass Object
    (
        [id] => 6
        [maincategory] => Accommodation
        [category] => Hostels
    )

[6] => stdClass Object
    (
        [id] => 7
        [maincategory] => Career
        [category] => Career Events
    )
列表中有4个独特的类别,2个属于main类别:住宿,其他2个类别属于main类别:职业。我想实现的是每个主要类别只列出一次,并且这些类别应属于该主要类别。大概是这样的:

[6] => stdClass Object
    (
        [id] => 7
        [maincategory] => Career
        [category] => array(Career Events, Business Sales, .....)
    )
[7] => stdClass Object
    (
        [id] => 7
        [maincategory] => Accommodation
        [category] => array(Hostels, Camping, .....)
    )
function fetch_all(){
    $data  = array();
    $first = $this->db->select('id, maincategory')->get('maincategory')->result_array();
    if( is_array( $first ) && count( $first ) > 0 ){
        foreach( $first as $key => $each ){
           $data[$key]['category_id']   = $each['id']; #main category id
           $data[$key]['maincategory']  = $each['id']; #main category name
           $second  = $this->db->select('category')->where_in('maincategory_id', $each['id'])->get('categories')->result_array();
           $data[$key]['category']      = $second;     #all sub-category(s) array
        }
    } 
}
阵列转储的最终结果可能会有所不同,但我希望您理解我试图实现的目标。我读了很多关于转换多维数组的书。我只是还没想好。非常感谢您的指导

试着这样做:

[6] => stdClass Object
    (
        [id] => 7
        [maincategory] => Career
        [category] => array(Career Events, Business Sales, .....)
    )
[7] => stdClass Object
    (
        [id] => 7
        [maincategory] => Accommodation
        [category] => array(Hostels, Camping, .....)
    )
function fetch_all(){
    $data  = array();
    $first = $this->db->select('id, maincategory')->get('maincategory')->result_array();
    if( is_array( $first ) && count( $first ) > 0 ){
        foreach( $first as $key => $each ){
           $data[$key]['category_id']   = $each['id']; #main category id
           $data[$key]['maincategory']  = $each['id']; #main category name
           $second  = $this->db->select('category')->where_in('maincategory_id', $each['id'])->get('categories')->result_array();
           $data[$key]['category']      = $second;     #all sub-category(s) array
        }
    } 
}

不要使用太多的db调用,请尝试使用下划线.php库

我在这里概述了一些如何在本案例中使用它的示例:

编辑