首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从数据库创建一个4维数组

如何从数据库创建一个4维数组
EN

Stack Overflow用户
提问于 2012-03-21 04:03:19
回答 3查看 3K关注 0票数 2

我正在尝试弄清楚如何让这段代码工作。基本上,我使用MySQL来获取包含多个值的关联数组。

示例数据库:数据库名称= Products

代码语言:javascript
复制
 ----------------------------------------------------------------.
|   name     | overcategory |   category   |     subcategory     |
|  Talon     |    null      | stud welding | capacitor discharge |
| cdss m3x40 | studs/bolts  |   cd-studs   |   stainless steel   |
----------------------------------------------------------------.

我用了SELECT name, overcategory, category, subcategory FROM Products WHERE 1 = 1;这个句子

在实际的数据库中有更多的条目,但它们与这个问题无关。

我想要在屏幕左侧以菜单形式输出的结果。

代码语言:javascript
复制
<nav>
   <h1> "$overcategory" </h1>
     <h2> "$category" </h2>
         <h3> "$subcategory" </h3>
           <a href = "">$productname </a>
           <a href = "">$productname3 </a>

   <h1> "$overcategory2" </h1>
     <h2> "$category2" </h2>
         <h3> "$subcategory2" </h3>
           <a href = "">$productname2 </a>
</nav>

我正在考虑通过创建一个多维数组来实现这一点,它看起来像这样:

代码语言:javascript
复制
    $testArray = array(
        ''=>array(
              'Boltsveiseapparater'=>array(
                            'Kondensator'=>array(
                                         'Talon',
                                         'LBS-75'
                                        ),
                                    'Arc'=>array(
                                         'LBH-410',
                                         'LBH-800'
                                        )
                                  )
            ),
            'Pinner/bolter'=>array(
                                        'CD-pinner'=>array(
                                                            'rustfri'=>array(
                                                                            'cdss m3x35',
                                                                            'cdss m3x40'
                                                                            ),
                                                              'stål'=>array(
                                                                            'cdms m3x35',
                                                                            'cdms m6x35'
                                                                            ),
                                                                'Alu'=>array(
                                                                            'cdal m3x10',
                                                                            'cdal m8x80'
                                                                            )
                                                        ),
                                        'Bossinger'=>array(
                                                            'Stål'=>array(
                                                                            'M6x10 5x8',
                                                                            'M5x12 4x10'
                                                                            ),
                                                                'Alu'=>array(
                                                                            'M6x10 5x8',
                                                                            'M5x12 4x10'
                                                                            ),
                                                            'Rustfri'=>array(
                                                                            'M6x10 5x8',
                                                                            'M5x12 4x10'
                                                                            )
                                                        )
                                )

      );                                                                        

我不知道如何通过循环遍历结果来做到这一点。有没有办法做到这一点而不造成巨大的厄运呢?如果没有,有人能帮我破解这个难题吗?

提前谢谢你。BM。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-21 04:44:26

如果在SQL查询中对结果的每一列进行排序,则可以循环遍历每个结果,并将其与最后一项进行比较,然后根据该结果调整输出。

代码语言:javascript
复制
SELECT name, overcategory, category, subcategory FROM Products ORDER BY overcategory, category, subcategory, name;

否则,这里有一种处理嵌套数组的方法:

代码语言:javascript
复制
<?php

echo "\n";
echo "<nav>\n";
foreach ($testArray as $overcategory_name => $category_data) {
    echo "\t<h1>$overcategory_name</h1>\n";
    foreach ($category_data as $category_name => $subcategory_data) {
        echo "\t\t<h2>$category_name</h2>\n";
        foreach ($subcategory_data as $subcategory_name => $product_name_data) {
            echo "\t\t\t<h3>$subcategory_name</h3>\n";
            foreach ($product_name_data as $product_name) {
                echo "\t\t\t\t<a href = \"\">$product_name</a>\n";
            }
        }
    }
}
echo "</nav>\n";
票数 1
EN

Stack Overflow用户

发布于 2012-03-21 04:11:32

您可以让mysql对结果集进行排序:

代码语言:javascript
复制
SELECT name, overcategory, category, subcategory FROM Products ORDER BY overcategory,category,subcategory;

然后,您可以简单地循环结果。每当overcategory,category,subcategory发生变化时,你都会输出一个新的标题。

票数 2
EN

Stack Overflow用户

发布于 2012-03-21 04:17:08

不如-

代码语言:javascript
复制
$res = mysql_query('SELECT name, overcategory, category, subcategory FROM Products WHERE 1 = 1 ORDER BY overcategory,category,subcategory, name;');

$aMenu = array();

while($row = mysql_fetch_assoc($res)) {
    $aMenu[$row['overcategory']][$row['category']][$row['subcategory']][] = $row['name'];
}

需要研究的一个更重要的问题是表结构。假设overcategory、category和子category是层次结构的一部分,那么您应该只存储产品所属的叶节点,并且应该将其存储为一个整数,该整数是categories(id, name, parent_id)表的FK。我倾向于选择产品目录的嵌套集合,但这取决于需求。

此外,在多个类别中表示单个产品是很常见的,在这种情况下,您需要将类别关系移动到连接表products_categories(product_id, category_id)中。

只是一点思考的食粮。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9794066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档