Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无法在codeigniter中创建多维数组_Php_Mysql_Arrays_Codeigniter_Multidimensional Array - Fatal编程技术网

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?