在为多维数组提供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来实现这一点。谢谢!
答案 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)设置一次,切换组。