【问题标题】:Codeigniter: get all values from single column as arrayCodeigniter:从单列中获取所有值作为数组
【发布时间】: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 的单个关联数组。

【问题讨论】:

  • 检索结果后为什么不转换呢?

标签: php arrays codeigniter codeigniter-3


【解决方案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);

【讨论】:

【解决方案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);
    

    【讨论】:

    【解决方案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文档的链接。
      猜你喜欢
      • 2013-04-29
      • 2017-08-11
      • 2023-04-10
      • 1970-01-01
      • 2014-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多