我试图弄清楚如何让这段代码发挥作用。基本上我使用MySQL来获取包含多个值的关联数组。
示例数据库:数据库名称=产品
----------------------------------------------------------------.
| 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;
在实际数据库中有更多条目,但它们与此问题无关。
我希望将结果作为菜单输出到屏幕的左侧。
<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>
我想通过创建一个看起来像这样的多维数组来做到这一点:
$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。
答案 0 :(得分:2)
你可以让mysql对结果集进行排序:
SELECT name, overcategory, category, subcategory FROM Products ORDER BY overcategory,category,subcategory;
然后你可以简单地循环结果。每当overcategory,category,subcategory更改时,您输出一个新标头。
答案 1 :(得分:1)
怎么样 -
$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和subcategory是层次结构的一部分,那么您应该只存储产品所属的叶节点,并且应该存储为FK到categories(id, name, parent_id)
表的整数。我倾向于选择产品目录的嵌套集,但这取决于要求。
此外,单个产品通常以多个类别表示,在这种情况下,您需要将类别关系移动到连接表products_categories(product_id, category_id)
。
只是一点思考。
答案 2 :(得分:1)
如果在SQL查询中对结果的每一列进行排序,则可以循环遍历每个结果并将其与最后一个条目进行比较,并根据该结果调整输出。
SELECT name, overcategory, category, subcategory FROM Products ORDER BY overcategory, category, subcategory, name;
否则,这是处理嵌套数组的一种方法:
<?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";