无法在 codeigniter 中创建多维数组

Posted

技术标签:

【中文标题】无法在 codeigniter 中创建多维数组【英文标题】:not able to create multi dimensional array in codeigniter 【发布时间】:2017-01-01 14:14:46 【问题描述】:

我有以下代码

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,数组的数量会随着技能的增加而增加,我希望为每个用户 ID 创建一个数组,并且该用户的技能应该在主数组中。谁能告诉我如何纠正我的数组

表结构

瞬间

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

【问题讨论】:

你能分享你的数据库结构吗?不能使用 group by 吗? @user1048123_SOreadytohelp 更新了我的帖子 我怀疑您是否能够以 result_array 自动提供您想要的数组结构的方式编写 SELECT 语句。这只是几行代码的工作,它从数据库中获取数据,然后将其转换为所需的目标结构。 @CBroe 你能告诉我怎么做吗 id 值是怎么回事,您只想在结果数组中包含用户 id 出现的第一个 id? 【参考方案1】:

没有一个查询可以满足您的需求。从数据库中检索值后,您将不得不进行一些处理。

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

在这个例子中,我放弃了表别名的使用,否则我会感到困惑:)

因为您的 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);

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,那么您将需要更多代码。如果您需要查看,请告诉我。

【讨论】:

以上是关于无法在 codeigniter 中创建多维数组的主要内容,如果未能解决你的问题,请参考以下文章

在 Powershell 中创建多维哈希表数组

如何在 Collection anylogic 中创建多维数组?

在jquery中创建一个多维数组

如何在 Laravel/PHP 中创建多维数组

在 iOS 中创建多维数组

如何在html表中创建多维数组