codeigniter展平查询结果数组[重复]

wlsrxk51  于 2022-12-07  发布在  其他
关注(0)|答案(2)|浏览(134)

此问题在此处已有答案

Is there a function to extract a 'column' from an array in PHP?(15个答案)
四个月前关门了。
我在Codeigniter中使用一个查询来返回属于某个用户的所有行的id。

$this->db->select('id');
$this->db->where('user_id', 99);
$query = $this->db->get('my_table');
return $query->result_array();

这将返回

Array ( [0] => Array ( [id] => 8 ) [1] => Array ( [id] => 7 ) [2] => Array ( [id] => 6 ) )

是否可以返回类似于

Array ( [0] => 8 [1] => 6 [2] => 7 )

c0vxltue

c0vxltue1#

CodeIgniter文档(尤其是query results)没有列出任何可以生成平面数组结果的内容(就像PDOStatement::fetchAll提供的PDO::FETCH_COLUMN模式)。因此,数组结果需要在代码中进行平面化,例如使用foreach循环:

$flat = array();
foreach($query->result_array() as $row) {
    $flat[] = $row['id'];
}

或者使用专用array_column

array_column($query->result_array(), 'id');

或者与通用array_reduce

array_reduce(
    $results, 
    fn ($accum, $row) => array_merge($accum, [$row['id']]),
    []);

如果你懒得在每次选择一列时添加几行代码,你需要调整CodeIgniter。比如添加一些选项或者在选择单列时返回扁平数组。我建议添加一个选项

1qczuiv0

1qczuiv02#

下面可以是另一种方法,我不知道它比公认的答案有什么好处。
假设你将函数的输出存储在$result中,那么你可以做如下操作:

array_unshift($result, null);
$transposed = call_user_func_array("array_map", $result);
print_r($transposed);

它将打印
数组([0] =〉数组([0] =〉8 [1] =〉6 [2] =〉7))
您可以通过$transposed[0]访问您想要的内容
数组([0] =〉8 [1] =〉6 [2] =〉7)

相关问题