ci框架在查询数据库,如何返回一个一维数组,我查的是多条数据的一个字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ci框架在查询数据库,如何返回一个一维数组,我查的是多条数据的一个字段相关的知识,希望对你有一定的参考价值。

ci框架在查询数据库,如何返回一个一维数组,我查的是多条数据的一个字段。多条数据,但是只查一个字段,应该是返回一个一维的数组

直接取一维数组是取不到了
只能把二维转成一维的了:
用result_array取到二维数组
再用array_column,转为一维数组
例:
$sql = 'select name from user';
$result = $this->db->query($sql)->result_array();
$one = array_column($result, 'name');
print_r($one);//这个就是一维数组了
参考技术A 只有返回记录,没有返回字段的。查询一个字段,result_array返回的就是只包含此字段值的所有记录(二维数组)。想要自己扩展一下吧 参考技术B row_array是一条.或者用limit 参考技术C $query->row();$query->row_array();多看手册。

如何使用代码点火器活动记录查询返回一维数组中的表字段

【中文标题】如何使用代码点火器活动记录查询返回一维数组中的表字段【英文标题】:How to return a table field in single dimensional array with code-igniter active record query 【发布时间】:2015-08-18 14:22:02 【问题描述】:

我正在从 user_roles 表中获取已登录用户的用户角色 ID。一个用户可以有多个角色,我在多维数组中得到结果。我正在使用 foreach 循环返回单个数组中的 role_ids 以在其他查​​询 IN 子句中使用。代码点火器中有没有办法检索一维数组中的角色 ID。这是我到目前为止所做的:

获取角色的 Modal 类函数

$select_fields = 'ur.role_id AS role_id';

$this->db->select($select_fields, FALSE); 

$this->db->from('users_roles AS ur');   
$this->db->where('ur.user_id', $user_id);  
$query = $this->db->get(); 
if($query->num_rows())

    return $query->result_array(); 

return FALSE; 

我得到的返回数组:

Array
(
    [0] => Array
        (
            [role_id] => 1
        )

    [1] => Array
        (
            [role_id] => 2
        )

)

我需要将上述返回数组传递给其他 SQL IN 语句,因为我必须手动将数组更改为:

$select_fields = 'ur.role_id AS role_id';

$this->db->select($select_fields, FALSE); 

$this->db->from('users_roles AS ur');   
$this->db->where('ur.user_id', $user_id);  
$query = $this->db->get(); 
if($query->num_rows())

    $result = $query->result_array(); 
    $user_role_ids = array();
    foreach ($result as $key => $value) 
        $user_role_ids[]    = $value['role_id'];
    
    return $user_role_ids;

return FALSE;

我得到的返回数组:

Array
(
    [0] => 1
    [1] => 2
)

【问题讨论】:

【参考方案1】:

如果你安装了最新的php,你可以使用array_column函数

喜欢这个

function somename()

  ...
  ...
  return array_column($query->result_array(),'role_id');  

function somename()

  ...
  ...
  return array_map(function($_)return $_['role_id'];, $query->result_array());

最终你可以在你的控制器上调用

$this->db->where_in('some_fieldname', $this->somename() );

【讨论】:

【参考方案2】:

只要把它当作

$select_fields = 'group_concat(ur.role_id) AS role_id';

$this->db->select($select_fields, FALSE); 

$this->db->from('users_roles AS ur');   
$this->db->where('ur.user_id', $user_id);  
$query = $this->db->get(); 
if($query->num_rows())

    return $query->result_array(); 

return FALSE;

这会给你一个数组

Array
(
    [0] => Array
        (
            [root] => 1,2,3,4
        )

)

这样您就可以轻松地在IN 语句中传递该值

【讨论】:

以上是关于ci框架在查询数据库,如何返回一个一维数组,我查的是多条数据的一个字段的主要内容,如果未能解决你的问题,请参考以下文章

CI codeigniter 查询 db query 返回 二维数组 返回 第一条记录

如何使用代码点火器活动记录查询返回一维数组中的表字段

004.CI4框架CodeIgniter, 配置mysql数据库,并进行数据库查询

CI环境配置

019.CI4框架CodeIgniter辅助函数类之:Array数组查询

市场调查中样本容量如何计算?如何确定样本量。我查的公式是:n=p*(1-p)/[E^2/Z^2+p*(1-p)/N]?