Codeigniter:从单列中获取所有值作为数组

Posted

技术标签:

【中文标题】Codeigniter:从单列中获取所有值作为数组【英文标题】:Codeigniter: get all values from single column as array 【发布时间】:2016-12-08 21:15:42 【问题描述】:

这是我从 t 获取单列的查询

$sql = "SELECT `id` FROM `loc8_groups`";
 $query = $this->db->query($sql);
 print_r($query>result());

它是这样产生数组结果的。

Array
(
    [0] => stdClass Object
        (
            [id] => 1
        )

    [1] => stdClass Object
        (
            [id] => 2
        )

    [2] => stdClass Object
        (
            [id] => 3
        )

)

但我希望结果为包含所有 ids 的单个关联数组。

【问题讨论】:

检索结果后为什么不转换呢? 【参考方案1】:

试试这个代码:

$sql = "SELECT `id` FROM `loc8_groups`";
$query = $this->db->query($sql);
$array1=$query>result_array();
$arr = array_map (function($value)
    return $value['id'];
 , $array1);
 print_r($arr);

【讨论】:

只有这个解决方案。 CI只有4个函数来返回结果——result()、result_array()、row()、row_array(); codeigniter.com/user_guide/database/examples.html【参考方案2】:

CodeIgniter 的 DB 实现不支持索引结果数组,您必须在对象或关联数组之间进行选择。

这样做是为了使您的查询更易于维护,因为返回的数字索引更难调试和维护。

CodeIgniter Docs - database results

但你可以做到,我建议你非常有用的内置函数array_column()

array_column() 从输入的单个列返回值,由 column_key 标识。可选地,可以提供一个 index_key 来根据输入数组的 index_key 列中的值对返回数组中的值进行索引。

它将您的 codeigniter 的关联数组转换为索引数组。

$sql = "SELECT `id` FROM `loc8_groups`";
$query = $this->db->query($sql);
$array = $query->result_array();
$arr = array_column($array,"id");
print_r($arr);

它会产生如下数组:

Array
(
   [0] => 1

   [1] => 2

   [2] => 3

)

【讨论】:

【参考方案3】:

使用mysql group_concat,避免foreach或使用array_map等

$sql = "SELECT group_concat(id separator ',') as id FROM `loc8_groups`";
$query = $this->db->query($sql);
$array1 = $query->row_array();
$arr = explode(',',$array1['id']);

print_r($arr);

【讨论】:

研究人员,请注意:1.) GROUP_CONCAT() 的最大长度为 1024。2.) 默认分隔符已经是逗号,因此无需指定。 3.) 如果目标列的值可能包含逗号,则此技术将变得不可靠。【参考方案4】:

试试这个代码:

 $result=$this->db->select('id')->get('loc8_groups')->result_array();

 $array=array_map (function($value)
                return $value['id'];
             , $result);

 print_r($array);

【讨论】:

这一建议在一年前就已在 ***.com/a/38738889/2943403 上推荐过【参考方案5】:

你可以这样做:

$sql = "SELECT `id` FROM `loc8_groups`";
$query = $this->db->query($sql);

$result = array();
$index = 0;
while($row = $query->unbuffered_row('array'))

    $result[] = $row['id'];
    $index++;

结果会是这样的:

array(100) 
[0]=>
    string(1) "1"
[1]=>
    string(1) "2"
[2]=>
    string(1) "3"
...

没有额外的转换,而且我根本不认为它是对 codeigniter 的限制,任何其他为此提供额外功能的框架都会在后台执行相同的操作,并且在 codeigniter 中你可以做任何你想做的事情很好地研究了框架。

【讨论】:

【参考方案6】:

你可以这样做:

$hold = ModelName::find('first', array('conditions' => array('register_id = ? AND table_id = ?', $this->register, $table->id)));

或许

$hold = ModelName::find('all', array('conditions' => array('register_id = ? AND table_id = ?', $this->register, $table->id)));

【讨论】:

请提供解释静态方法find()的CodeIgniter文档的链接。

以上是关于Codeigniter:从单列中获取所有值作为数组的主要内容,如果未能解决你的问题,请参考以下文章

通过数组codeigniter从数据库中获取结果

SQL查询从具有相同列“名称”的其他两个表中获取具有不同值的单列“名称”[关闭]

如何使用codeigniter从mysql中获取多个多维数组中的数据?

从laravel中的多对多关系中获取单列

从数据框中的所有列中获取值的最简单方法是啥[重复]

LINQ 查询在 C# 中使用实体框架获取单列和单行值而不使用 Where