Codeigniter:将单列中的所有值作为数组

时间:2016-08-03 08:45:49

标签: php arrays codeigniter codeigniter-3

这是我从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的单个关联数组。

8 个答案:

答案 0 :(得分:15)

试试这段代码:

$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);

答案 1 :(得分:3)

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

<admin>
    <routers>
            <adminhtml>
                <args>
                    <frontName><![CDATA[admin]]></frontName>
                </args>
            </adminhtml>
        </routers>
</admin>


<admin>
    <routers>
            <adminhtml>
                <args>
                    <frontName><![CDATA[admin]]></frontName>
                </args>
            </adminhtml>
        </routers>
</admin>

答案 2 :(得分:3)

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

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

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 :(得分:3)

我知道这个问题很旧,但是我想使用array_column分享一个简单的解决方案:

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

答案 4 :(得分:1)

试试这段代码:

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

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

 print_r($array);

答案 5 :(得分:0)

您可以这样做:

$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 :(得分:0)

您可以做一些类似的事情:

false

或者也许

from django.contrib import admin
from django.conf.urls import include, url
from rest_slack.views import DRSEventView, DRSCommandView
from django.urls import path


api_patterns = ([
        path('web/', DRSEventView.as_view()),
        path('events/', DRSCommandView.as_view()),
    ], 'api')


urlpatterns = [
 url(r'^admin/', admin.site.urls),
 path('api/v1/', include(api_patterns)),]

答案 7 :(得分:-1)

使用以下脚本将get结果作为包含所有ID的单个关联数组

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

print_r($arr);