PHP - 基于计数通过循环创建多维数组

时间:2011-06-23 15:47:30

标签: php mysql codeigniter multidimensional-array

在为多维数组提供count和foreach的正确组合时遇到一些麻烦。

我目前正在执行以下操作,从我的db返回的结果中创建一个关联数组:

$sql = "SELECT g.id, g.shortname FROM games g ORDER BY g.id ASC";
        $query = $this->db->query($sql);

        if($query->num_rows() > 0):
            foreach($query->result() as $row):
                $data[$row->id] = $row->shortname;
            endforeach;
        return $data;
        else:
            return false;
        endif;

这当然会产生以下数组(工作正常;半仿代码):

array ( [1] => CoolGame, [2] => AnotherGame, [3] => BetterGame, [4] => UglyGame)

....等等

但我想做的是通过多维数组自动将结果(基于计数var / limiter)分解成组:

array (Group 1 => 
         array([1] => CoolGame [2] => AnotherGame),
       Group 2 =>  
         array([3] => BetterGame [4] => UglyGame)
)

所以在那个例子中,我的$depth_count = 2;

如果有人感兴趣,我这样做是为了通过CI的表单助手的form_multiselect()函数使用自动生成的<optgroup>标签进行多选。 需要一些帮助来调整我的PHP来实现这一点。谢谢!

2 个答案:

答案 0 :(得分:7)

您可以使用php的array_chunk方法。请注意以下修改后的代码:

if($query->num_rows() > 0):
    foreach($query->result() as $row):
        $data[$row->id] = $row->shortname;
    endforeach;

    $data = array_chunk($data, 2);

return $data;

答案 1 :(得分:1)

$nGroup = 1; $curGroup = '';
$nRow = 0;
foreach ($query->result() as $row){
  if ($nRow++ % 2 == 0){ // change 2 to your limiter
    $curGroup = 'Group ' . $nGroup++;
    $data[$curGroup] = array();
  }
  $data[$curGroup][$row->id] = $row->shortname;
}

那样的东西?跟踪您所在的行,添加的当前组以及组名称。然后,每隔2(或第N)设置一次,切换组。