【问题标题】:PHP MySQL building a 3 Tier multi dimensional arrayPHP MySQL 构建 3 层多维数组
【发布时间】:2012-09-02 14:30:35
【问题描述】:

所以我有我的查询,它的返回结果正如预期的一样膨胀,除了今天我的设计师遇到了麻烦。这似乎让我有点偏离了我的游戏,也许是因为我累了谁知道呢..

我要创建一个 3 层数组

主要类别、子类别(每个主要类别可以有多个)以及每个子类别的项目列表,可以是 1 到 100 个项目。

我尝试过 foreach、while、for 循环。通常都是以$final = array(); 开头,然后是下面的循环。

尝试构建如下数组:

$final[$row['primary]][$row['sub']][] = $row['item]
$final[$row['primary]][$row['sub']] = $row['item]

我尝试将它们分别定义为有自己的数组以使用array_push()。以及其他各种策略,我都失败了。我需要一个头脑清醒的人来帮助我。从最适合我需要的循环类型到如何构建我的数组以按计划构建。

理想的结果是

array(
   primary = array
             (
                sub = array
                      (
                        itemA,
                        itemB,
                        itemC
                      ),
                sub = array
                      (
                        itemA,
                        itemB,
                        itemC
                      ),
             ),
   primary = array
             (
                sub = array
                      (
                        itemA,
                        itemB,
                        itemC
                      ),
                sub = array
                      (
                        itemA,
                        itemB,
                        itemC
                      ),
             ),
)

【问题讨论】:

    标签: php mysql arrays multidimensional-array while-loop


    【解决方案1】:

    在处理您的请求时这样的事情:

    if (!array_key_exists($row['primary'], $final)) {
        $final[$row['primary']] = array();
    }
    if (!array_key_exists($row['sub'], $final[$row['primary']])) {
        $final[$row['primary']][$row['sub']] = array();
    }
    $final[$row['primary']][$row['sub']][] = $row['item'];
    

    【讨论】:

      【解决方案2】:

      这样的……

      $final = 
      array(
          'Primary1'=>array(
              'Sub1'=>array("Item1", "Item2"),
              'Sub2'=>array("Item3", "Item4")
          ),
          'Primary2'=>array(
              'Sub3'=>array("Item5", "Item6"),
              'Sub4'=>array("Item7", "Item8")
          ),
      );
      

      您可以使用array_push 来做到这一点,但这并不容易,因为您真的想要一个关联数组,而 array_push 不能很好地与键一起使用。您当然可以使用它向子元素添加项目

      array_push($final['Primary1']['Sub1'], "Some New Item");
      

      【讨论】:

      • 确实是这样,但在我的例子中,主要类别可能非常大和动态,子类别也可以,每个都有列表,并将其工作到源自 mysql 查询的循环中是什么让我现在被打败了。
      • 那么我怀疑您需要按照@Ninsuo 的建议进行操作并手动检查该键是否存在,如果未将其设置为数组,则填充该数组。
      【解决方案3】:

      如果我理解正确,您想将几个数据库关系提取到 PHP 数组中。

      这是一些如何解决该问题的示例代码:

      <?php
      
      $output = array();
      
      $i = 0;
      // DB Query
      while($categories) { // $categories is an db result
      
          $output[$i] = $categories;
      
          $ii = 0;
          // DB Query
          while($subcategories) { // $subcategories is an db result
      
              $output[$i]['subcategories'][$ii] = $subcategories;
      
              $iii = 0;
              // DB Query
              while($items) { // $items is an db result
      
                  $output[$i]['subcategories'][$ii]['items'][$iii] = $items;
      
                  $iii++;
              }
              $ii++;
          }
          $i++;
      }
      
      print_r($output);
      
      ?>
      

      【讨论】:

        猜你喜欢
        • 2012-12-14
        • 1970-01-01
        • 2013-11-05
        • 2011-07-17
        • 1970-01-01
        • 2012-09-10
        • 1970-01-01
        • 2018-05-30
        • 1970-01-01
        相关资源
        最近更新 更多