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

5
遇到了一些问题,无法找到正确的计数和foreach结合使用的方法来处理多维数组。
我目前正在执行以下操作,从数据库返回的结果中创建关联数组:
$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)

“...等等”,但我想要做的是根据计数变量/限制器自动将结果分成多维数组组,例如:
array (Group 1 => 
         array([1] => CoolGame [2] => AnotherGame),
       Group 2 =>  
         array([3] => BetterGame [4] => UglyGame)
)

所以在这个例子中,我的 $depth_count = 2; 如果有人感兴趣,我正在这样做是为了处理使用CI表单助手的form_multiselect()函数自动生成的多选项卡中的<optgroup>标签。 需要一些帮助来调整我的PHP代码。谢谢!
2个回答

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,说得好。我忘记了那个函数。如果它是任意分组的话,我实际上很喜欢它。 - Brad Christie
+1 array_chunk(在处理数组时非常有用的函数 :)) - Mukesh Chapagain
很酷的东西。完美地工作,本来可以成为完整的解决方案,但它创建了数字索引数组键这一事实。我可能可以在事后迭代数组并在每个键名前加上“Group”。 - k00k

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;
}

这样做?跟踪您所在的行、当前添加到的组以及组名称。然后,在每个第二个(或第N个)集合时,切换组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接