0

我在处理多维数组数据时遇到问题。我加入了 2 个表(主要类别和类别)。

表 Maincategories: id, maincategory

表类别: id、maincategory_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个属于maincategory:Accommodaton,另外2 个类别属于maincategory:Career。我想要实现的是每个 maincategory 仅列出一次,并且类别应属于该 main_category。像这样的东西:

[6] => stdClass Object
    (
        [id] => 7
        [maincategory] => Career
        [category] => array(Career Events, Business Sales, .....)
    )
[7] => stdClass Object
    (
        [id] => 7
        [maincategory] => Accommodation
        [category] => array(Hostels, Camping, .....)
    )

数组转储的最终结果可能/可能看起来不同,但我希望你理解我想要实现的目标。我读了很多关于转换多维数组的内容。我只是无法理解它。非常感谢任何方向!

4

2 回答 2

1

试试这样:

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
        }
    } 
}
于 2013-10-24T09:39:44.850 回答
0

而不是使用这么多的数据库调用,尝试使用 underscore.php 库http://brianhaveri.github.io/Underscore.php/

我在这里概述了一些如何在这种情况下使用它的示例:http: //codebyjeff.com/blog/2012/08/no-more-machine-gunning-use-underscore-php

编辑

于 2013-10-24T10:06:21.313 回答