PHP MySQL构建一个3层多维数组

时间:2012-09-09 13:42:06

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

所以我有我的查询,它的返回结果正如所期望的那样都是膨胀,除了今天我的设计师通过扳手。这似乎有点让我失去了我的游戏,也许是因为我很累,谁知道,无论如何..

我要创建一个3层数组

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

我试过foreach,而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
                      ),
             ),
)

3 个答案:

答案 0 :(得分: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");

答案 1 :(得分:2)

在处理您的请求期间有类似的事情:

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 :(得分:0)

如果我理解正确,您希望将几个db关系提取到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);

?>