php – 无法在codeigniter中创建多维数组
我有以下代码
public function get_request($requestid) { $this->db->select('*'); $this->db->from('instanthire as s'); $this->db->join('instanthire_skills as ss','s.id = ss.requestid'); $this->db->where('s.id',$requestid); $query = $this->db->get(); return $query->result_array(); } 我得到的结果是 Array ( [0] => Array ( [id] => 1 [userid] => 1 [skills] => html ) [1] => Array ( [id] => 2 [userid] => 1 [skills] => core php ) ) Array ( [0] => Array ( [id] => 3 [userid] => 2 [skills] => Core Java ) [1] => Array ( [id] => 4 [userid] => 2 [skills] => Advance Java ) [2] => Array ( [id] => 4 [userid] => 2 [skills] => .net ) ) 问题是,对于每个用户标识,数组的数量随着技能的增加而增加,我希望为每个用户标识创建一个数组,并且该用户的技能应该在主数组中.任何人都可以告诉我如何纠正我的阵列 表结构 instanthire id userid 1 1 2 2 instanthire_skills id requestid skills 1 1 html 2 1 core php 3 2 core java 4 2 advance 5 2 .net 期望的输出 Array ( [0] => Array ( [id] => 1 [userid] => 1 [skills] => Array ( [0] => html [1] => core php ) ) [1] => Array ( [id] => 3 [userid] => 2 [skills] => Array ( [0] => core java [1] => advance java [2] => .net ) ) ) 解决方法
没有任何一个问题可以满足您的需求.从db中检索值后,您将不得不进行一些处理.
我的建议是使用mysql函数Group_Concat()返回逗号分隔列表(字符串)的技能.你可以爆炸()来创建一系列技能. 在这个例子中,我已经放弃使用表别名,因为我感到困惑,否则:) 因为你的where子句只会返回一行(在instanthire中只有一行具有任何给定的userid值 – 对吗?)我使用$query-> row_array()来获取数据.与$query-> result_array()返回的数组数组相比,这简化了返回单个数组的过程. public function get_request($requestid) { $this->db->select('instanthire.id,Group_Concat(instanthire_skills.skills) as skills'); $this->db->from('instanthire'); $this->db->join('instanthire_skills','instanthire.id = instanthire_skills.requested_id','inner'); $this->db->where('instanthire.userid',$requestid); $query = $this->db->get(); $result = $query->row_array(); $result['skills'] = explode(",",$result['skills']); return $result; } 我们假设您运行了这两行代码 $data = $this->get_request(2); var_dump($data); 在$result = $query-> row_array()之后的get_request()内部;你添加了var_dump($result);你会得到这个 array (size=2) 'id' => string '2' (length=1) 'skills' => string 'core java,advance,.net' (length=22) 并且在get_request()之后返回var_dump($data);显示这个 array (size=2) 'id' => string '2' (length=1) 'skills' => array (size=3) 0 => string 'core java' (length=9) 1 => string 'advance' (length=7) 2 => string '.net' (length=4) 如果要处理多个用户标识,则需要更多代码.如果您需要,请告诉我. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |