web-dev-qa-db-ja.com

Codeigniter:単一の列からすべての値を配列として取得します

これが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を含む単一の連想配列として結果が必要です。

9
iam batman

このコードを試してください:

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

CodeIgniterのDB実装は、インデックス付きの結果配列をサポートしていません。オブジェクトまたは連想配列のどちらかを選択する必要があります。

これは、クエリをより保守しやすくするために行われます。数値インデックスを返すと、デバッグと保守が難しくなるためです。

CodeIgniter Docs-データベース結果

しかし、あなたはそれを行うことができます、私はあなたのために非常に便利な組み込み関数 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
Haritsinh Gohil

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);
3
Golduno Support

私はこの質問が古いことを知っていますが、 array_column を使用して簡単な解決策を共有したいと思いました:

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

このコードを試してください:

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

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

 print_r($array);
1
Mahdi Bagheri

あなたはこのようにそれを行うことができます:

$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では、フレームワークを研究した場合、あなたがやりたいことを何でもできます上手。

0
Sherif Salah

あなたはこのような少し何かをすることができます:

$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)));
0
Brennan James