Php 无法在codeigniter中创建多维数组
我有以下代码Php 无法在codeigniter中创建多维数组,php,mysql,arrays,codeigniter,multidimensional-array,Php,Mysql,Arrays,Codeigniter,Multidimensional Array,我有以下代码 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',$request
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
)
)
问题是,对于每个userid,数组的数量随着技能的增加而增加,我希望为每个userid创建一个数组,并且该用户的技能应该在主数组中。有人能告诉我如何更正数组吗
表结构
instanthire
id userid
1 1
2 2
速成技能
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
)
)
)
没有一个查询是你想要的。在从数据库中检索值之后,必须进行一些处理 我的建议是使用mysql函数
Group\u Concat()
返回逗号分隔的技能列表(字符串)。您可以explode()
创建一系列技能
在本例中,我放弃了表别名的使用,因为我在其他方面感到困惑:)
因为您的where
子句只返回一行(在instanthire
-对吗?)中只有一行具有任何给定的userid
值),所以我使用$query->row\u array()
来获取数据。这简化了对单个数组的返回,而不是$query->result\u 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\u dump($result)代码>你会得到这个
array (size=2)
'id' => string '2' (length=1)
'skills' => string 'core java,advance,.net' (length=22)
在get\u request()之后返回var\u 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)
如果要处理多个userid
,则需要多一点代码。如果您需要查看,请告诉我。您可以分享您的数据库结构吗?无法使用group by?@user1048123\u SOreadytohelp更新了我的帖子。我怀疑您是否能够以这样的方式编写SELECT语句:结果数组将自动提供所需的数组结构。这是一项只需几行代码即可完成的工作,这些代码将数据作为来自数据库的数据,然后将其转换为所需的目标结构。@CBroe您能告诉我如何完成吗?id值是什么,您只想在结果数组中拥有用户id的第一个id?