从 CodeIgniter 查询中的多个查询结果集中收集并内爆列值

问题描述 投票:0回答:4

我有一个以下格式的数组:

$var = Array
     ( 
     [0] => Array
         (
        [name] => Harry
          )

      [1] => Array
         (
        [name] => Wayne
          )

      )
 Array
     (
     [0] => Array
         (
        [name] => Wayne
         )

我想内爆这个数组,这样我就可以得到它的格式:

 Harry,Wayne
 Wayne

根据我的尝试,我得到了它的格式:

Harry,Wayne
Harry,Wayne,Wayne

我尝试过的(并不重要,因为它是错误的)

foreach($var as $a){
 foreach($a as $b){
 }$c[] = $b
   }
 $imp = implode(',',$c);

$var 是使用 fetch_array 从数据库中获取的。

    $this->db->select('name');
    $this->db->where('id', $Id);
    $this->db->from('info');
    $row = $this->db->get();
    $var = $row->result_array();

其中 $Id 是包含某些用户 ID 的数组。

php arrays codeigniter implode
4个回答
1
投票
foreach($var as $a)
{
    unset($temp);
    foreach($a as $b)
    {
        $temp[] = $b['name'];
    }
    $c[] = implode(",", $temp);
}

// output all the names
foreach ($c as $csvNames)
{
    echo $csvNames;
}

0
投票

试试这个。

foreach($var as $a){
  $m = '';
  $delim = '';
  foreach($a as $k){
     $m .= $delim . $k['name'];
     $delim = ',';
  }

  $c[] = $m;
}

foreach($c as $d){
  echo $d;
}

0
投票

请忽略那些硬编码的循环。有一个递归函数。

array_walk_recursive($var, create_function('$val, $key', 'array_push($obj, $val);'), &$output);
echo implode(",",$output);

0
投票

你的问题说

其中 $Id 是包含某些用户 ID 的数组。

嗯,CodeIgniter 的查询生成器方法

where()
并不是设计用于以您编写脚本的方式接收数组。 我只能假设您正在重复访问数据库——这既是不好的做法,也是可以避免的。

要从数据库查询中返回列值的平面数组,请在结果集上使用

where_in()
,然后使用
array_column()

内爆步骤很可能是表示层的工作,因此请推迟视图层的该过程。

return array_column(
    $this->db
        ->where_in('id', $ids)
        ->get('name')
        ->result(),
    'name'
);

这将通过一次数据库访问返回符合条件的行中所有名称的平面数组。

© www.soinside.com 2019 - 2024. All rights reserved.