У меня есть функция в моей модели:
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 в моем представлении.
Иногда эти строки будут иметь общие черты, например поле idjob
как указано в правиле join
.
На данный момент я получаю вывод (от 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
и строить под-массив всех связанных с ним произведений.
Я пробовал всевозможные вещи: array_chunk()
, group by, все виды.
Попробуйте это, возможно, вам придется немного изменить его:
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; }