繁体   English   中英

PHP MySQL构建3层多维数组

[英]PHP MySQL building a 3 Tier multi dimensional array

因此,我得到了我的查询,它的返回结果符合预期,但今天,除了我的设计师用扳手外,其他所有东西都在膨胀。 看来这似乎使我无法参加比赛,也许是因为无论如何我都会感到疲倦。

我要创建一个3层阵列

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

我已经尝试过foreach,而对于循环。 通常都以$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
                      ),
             ),
)

像这样...

$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");

在处理您的请求期间类似这样的内容:

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'];

如果我对您的理解正确,则希望将几个数据库关系获取到一个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);

?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM