加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 无法在codeigniter中创建多维数组

发布时间:2020-12-13 16:05:22 所属栏目:PHP教程 来源:网络整理
导读:我有以下代码 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(); ret
我有以下代码

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)

如果要处理多个用户标识,则需要更多代码.如果您需要,请告诉我.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读