【问题标题】:Codeigniter group by and create multidimensional arrayCodeigniter 分组并创建多维数组
【发布时间】:2013-09-11 15:29:44
【问题描述】:

我的模型中有一个函数:

public function get_job($lsnumber = FALSE) {        
        $this->db->join('administrator', 'job.idadministrator = administrator.idadministrator');
        $this->db->join('artwork', 'job.idjob = artwork.idjob');

        if($lsnumber === FALSE) {
            $query = $this->db->get('job');
            return $query->result_array();
        }
    }

返回这个让我可以在我的视图中使用 foreach 循环为数据库中的每个条目生成一行。

有时这些行会有一些共同点,例如 join 规则中引用的 idjob 字段。

目前,我得到这样的输出(来自print_r):

Array
(
    [idjob] => 1
    [lsnumber] => 12345
    [custname] => Scott Brown (Customer)
    [custemail] => sbrown@example.com
    [custcompany] => Customer
    [idadministrator] => 1
    [complete] => 0
    [administratorname] => Scott Brown (Administrator)
    [administratoremail] => scott@example.com
    [administratorjob] => Job
    [administratorphone] => 01234 567890
    [idartwork] => 1
    [filename] => gb-usb1.jpg
    [productname] => Bespoke USB Drive
    [revision] => 0
    [status] => N
)

Array
(
    [idjob] => 1
    [lsnumber] => 12345
    [custname] => Scott Brown (Customer)
    [custemail] => sbrown@example.com
    [custcompany] => LSi (Customer)
    [idadministrator] => 1
    [complete] => 0
    [administratorname] => Scott Brown (Administrator)
    [administratoremail] => scott@example.com
    [administratorjob] => Job
    [administratorphone] => 01234 567890
    [idartwork] => 2
    [filename] => pa17.jpg
    [productname] => Notebooks
    [revision] => 0
    [status] => Y
)

但是,我希望将数组分组和多维,如下所示:

Array
(
    [idjob] => 1
    [lsnumber] => 12345
    [custname] => Scott Brown (Customer)
    [custemail] => sbrown@example.com
    [custcompany] => Customer
    [idadministrator] => 1
    [complete] => 0
    [administratorname] => Scott Brown (Administrator)
    [administratoremail] => scott@example.com
    [administratorjob] => Job
    [administratorphone] => 01234 567890
    [artwork][0] => Array
        (   
            [idartwork] => 1
            [filename] => gb-usb1.jpg
            [productname] => Bespoke USB Drive
            [revision] => 0
            [status] => N
        )
    [artwork][1] => Array
        (   
            [idartwork] => 2
            [filename] => pa17.jpg
            [productname] => Notebooks
            [revision] => 0
            [status] => Y
        )
)

我希望能够按idjob 对其进行分组,并构建一个包含所有加入它的artworks 的子数组。

我尝试了各种方法:array_chunk(),分组,各种方法。

【问题讨论】:

    标签: php mysql codeigniter


    【解决方案1】:

    试试这个,你可能需要稍微改变一下:

    function get_job(){
        $data   = array();
        $data   = $this->db->get('job')->result_array();
        foreach( $data as $key=>$each ){
            $data[$key]              = $this->db->where('idadministrator', $each['idadministrator'])->get('administrator')->row_array();
            $data[$key]['artwork']   = $this->db->where('idjob', $each['idjob'])->get('artwork')->result_array();  
        }
        return $data;
    }
    

    【讨论】:

    • 这太好了,谢谢。还有一件事,我该如何调整它以将idjobcustname 等保留在数组中?
    • 别担心,我已经想通了。将第一个$data[$key] 更改为工作信息,并为administrator 添加另一个$key。感谢您的帮助,更好的是,这对我来说几乎都是有意义的:)
    • 坏主意。您为每个作业运行一个查询。现在考虑一个查询需要 1 毫秒,并且有 10000 个作业 => 您的页面需要 10 秒才能加载。您的应用程序的可扩展性不是很高(= 性能很大程度上取决于数据量)。使用连接方法,您可以执行单个查询
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    相关资源
    最近更新 更多