2016-08-25 114 views
4

我有以下代码无法在笨创建多维数组

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 
     ) 
) 

的问题是,对于每一个用户id阵列的数量随着技能的增加而增加,我希望为每个userid创建一个数组,并且该用户的技能应该在主数组内。谁能告诉我怎么可以纠正我的数组

表结构

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 
       ) 
     ) 
) 
+0

你能分享你的db结构吗?是不是可以通过组? – shafiq

+0

@ user1048123_SOreadytohelp更新了我的文章 – sammy001

+0

我怀疑你可以用result_array会自动传递你想要的数组结构的方式编写SELECT语句。这只是几行代码的工作,从数据库获取数据,然后将其转换为所需的目标结构。 – CBroe

回答

1

有不是一个简单的查询就能实现你想要的功能。从数据库中检索值后,您将不得不做一些处理。

我的建议是使用mysql函数Group_Concat()返回逗号分隔的列表(字符串)的技能。你可以通过explode()来创建一系列技能。

在这个例子中,我已经放弃了使用表的别名,因为我弄糊涂否则:)

因为你where子句将只返回一个行(只有一个在instanthire任何给定的userid值列 - 对吧?)我正在使用$query->row_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); 

和内部get_request()$result = $query->row_array();后您添加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) 

如果你想处理多个userid那么你将需要更多的代码。让我知道你是否需要看到这一点。