我正在尝试使用递归来构建我的网站导航,我似乎无法正确嵌套<div>
标记。我甚至不确定这段代码是否应该是我应该关注的路径,但这是一个开始。所需的输出:
<div class="parent">1</div>
<div class="child">
<a href="#">1.1</a>
<a href="#">1.2</a>
<a href="#">1.3</a>
</div>
<div class="parent">2</div>
<div class="child">
<a href="#">2.1</a>
<a href="#">2.2</a>
<a href="#">2.3</a>
</div>
这是我的数据库:
以下是我正在努力工作的代码:(此代码需要大量工作)
/* here's the call */
$this->buildNav($array,NULL,false);
private function buildNav($array,$parent,$loop)
{
$html = '';
$class = ($loop) ? 'child' : 'parent';
$tag = '<div>%s</div>';
$child = false;
foreach($array as $item)
{
if($item['parent']===$parent)
{
$child = true;
$html .= '<div>'.$item['category_name'];
$html .= $this->buildNav($array,$item['category_id'],true);
$html .= '</div>';
$html .= '<a href="#">'.$item['category_name'].'</a>';
}
if(!$child)
{
$tag = '';
}
}
return sprintf($tag,$html);
}
更新
根据shapeshifter的建议,我离开了递归,只是调用了一个函数来让孩子们......美丽的想法;)这是代码:
private function buildNav($array,$parent)
{
$html = '';
foreach($array as $item)
{
if($item['parent'] === NULL)
{
$html .= '<div class="parent">'.$item['category_name'].'</div>';
$html .= '<div class="child">'.$this->getChildren($array,$item['category_id']).'</div>';
}
}
return $html;
}
private function getChildren($array,$parent)
{
$html = '';
foreach($array as $item)
{
if($item['parent']===$parent)
{
$html .= '<a href="#">'.$item['category_name'].'</a>';
}
}
return $html;
}
再次感谢提供了如此深刻的选择和/或方向的其他人;)