【发布时间】:2013-01-07 04:09:02
【问题描述】:
我在生成我的数据库(站点地图)的完整树时遇到了一些问题。
我达到了我想编写更好的代码的水平。这就是我为这个谜题选择递归函数的原因。
我想生成一个无穷无尽的无序列表。 像这样:
<ul>
<li><a></a>
<ul>
<li><a></a>(subs)
etc etc etc.....
</ul>
</li>
</ul>
就像我已经说过的,我尝试了以下方法:
<?php
function traverseArray($array, $sub=false)
{
foreach($array as $cat)
{
if(isset($cat['childeren']) && is_array($cat['childeren']))
{
//a category with subs
echo('<ul id="'.$cat['parent_cat_id'].'" class="lv0">');
echo('<li id="'.$cat['parent_cat_id'].'"><a href=#>'.$cat['name'].'</a>'."\n");
traverseArray($cat['childeren'], true);
}else{
if($sub){
//a sub category of category
echo('</ul></li>');
echo('<li id="'.$cat['parent_cat_id'].'"><a href=#>'.$cat['name'].'</a></li>'."\n");
}else{
//category with no subs
echo('<ul id="'.$cat['parent_cat_id'].'" class="lv0">');
echo('<li id="'.$cat['parent_cat_id'].'"><a href=#>'.$cat['name'].'</a></li>'."\n");
echo('</ul>');
}
}
}
}
traverseArray($sitemap);
?>
但这是一个我无法正确解决的难题, 这是迄今为止的结果(混乱):
<ul id="0" class="lv0">
<li id="0"><a href=#>Headsets</a>
</ul></li>
<li id="1"><a href=#>(USB) headsets ....</a></li>
</ul></li>
<li id="1"><a href=#>... headsets</a></li>
</ul></li>
<li id="1"><a href=#>.. USB headsets</a></li>
</ul></li>
<li id="1"><a href=#>Bluetooth headsets</a></li>
<ul id="0" class="lv0">
<li id="0"><a href=#>Unified Communications</a></li>
一个大乱子! $sitemap 数组如下所示:
Array
(
[0] => Array
(
[category_id] => 1
[parent_cat_id] => 0
..........etc
........etc
[type] => cat
[childeren] => Array
(
[0] => Array
(
[category_id] => 2
[parent_cat_id] => 1
.......etc
[type] => cat
[childeren] => Array
(
[0] => Array
(
[category_id] => 32
[parent_cat_id] => 16
.......etc
[type] => series
)
)
所以孩子们在孩子们在孩子们, 这是在正确的轨道上执行此操作的最佳方法吗?
或者有更好的方法吗? 像sql树什么的?或者只是 foreach 中的旧 foreach ..(这次我试图避免)。
任何帮助将不胜感激!!!
提前致谢,
雅各布
【问题讨论】:
-
在这个网站上找到一些有用的 msql 查询:仍然不知道这是否是正确的方法,mikehillyer.com/articles/managing-hierarchical-data-in-mysql
-
请帮我解决与同一问题相关的问题(stackoverflow.com/questions/17673917/…)
标签: php mysql database arrays html-lists