【问题标题】:PHP - Create multidimensional array via a loop based on a countPHP - 通过基于计数的循环创建多维数组
【发布时间】:2011-09-21 08:43:59
【问题描述】:

在为多维数组想出正确的 count 和 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 以实现这一点。谢谢!

【问题讨论】:

    标签: php mysql codeigniter multidimensional-array


    【解决方案1】:

    你可以使用 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,Touche。我忘记了那个功能。我真的喜欢这样,如果它是任意分组的话。
    • +1 array_chunk(玩数组时非常有用的功能:))
    • 很酷的东西。工作完美,将是完整的解决方案,除了它创建数字索引数组键的事实。事后我可能会遍历数组并将“Group”添加到每个键名。
    【解决方案2】:
    $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 组)切换一次组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-12
      • 2021-02-01
      • 2015-02-17
      • 2020-05-15
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      • 2019-12-29
      相关资源
      最近更新 更多