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:从单列中获取所有值作为数组的主要内容,如果未能解决你的问题,请参考以下文章
SQL查询从具有相同列“名称”的其他两个表中获取具有不同值的单列“名称”[关闭]