我正在从数据库中构建递归php菜单功能。
我的联系人:
$menu = $vt->prepare("SELECT * FROM menus");
$menu->execute(array());
$menuSonuc = $menu->fetchAll(PDO::FETCH_OBJ);
此函数生成空ul。
<li>
<a href=""><span class="sagok"></span>TITLE</a>
<ul></ul>
</li>
我的问题: 如何防止此功能中的空ul?
echo '<ul class="anamenu">';
foreach ($menuSonuc as $menum) {
if ($menum->katID == null) {
echo '<li><a href=""><span class="asagiok"></span>' . $menum->baslik . '</a>';
$id = $menum->id;
kategoriler($menuSonuc, $id);
echo '</li>';
}
}
echo '</ul>';
function kategoriler($menuSonuc, $id)
{
echo '<ul>';
foreach ($menuSonuc as $menum) {
if ($menum->katID == $id) {
echo '<li><a href=""><span class="sagok"></span>' . $menum->baslik . '</a>';
kategoriler($menuSonuc, $menum->id);
echo '</li>';
}
}
echo '</ul>';
}
答案 0 :(得分:1)
如果ul
为空,则表示$menuSonuc
为空,并且不输入foreach
。您可以检查其是否为空,以防止空ul
function kategoriler($menuSonuc, $id){
if(empty($menuSonuc)){
return;
}
echo '<ul>';
foreach ($menuSonuc as $menum) {
if ($menum->katID == $id) {
echo '<li><a href=""><span class="sagok"></span>' . $menum->baslik . '</a>';
kategoriler($menuSonuc, $menum->id);
echo '</li>';
}
}
echo '</ul>';
}
更新
如果您仍然得到空的ul
,则问题出在您正在检查$menum->katID == $id
的情况下。
这意味着$menum->katID
与$id
从未相同。
检查这些值,您将解决您的问题。或者给我们一个您的数组的例子,以便我们检查它们。
答案 1 :(得分:0)
您必须添加一些检查,请参见下面的代码
if(!empty($menuSonuc)){
echo '<ul class="anamenu">';
foreach ($menuSonuc as $menum) {
if ($menum->katID == null) {
echo '<li><a href=""><span class="asagiok"></span>' . $menum->baslik . '</a>';
$id = $menum->id;
kategoriler($menuSonuc, $id);
echo '</li>';
}
}
echo '</ul>';
}
function checkSub($menuSonuc, $id){
foreach ($menuSonuc as $menum) {
if ($menum->katID == $id) {
return true;
}
}
return false;
}
function kategoriler($menuSonuc, $id)
{
if(!empty($menuSonuc)){
$index=0;
foreach ($menuSonuc as $menum) {
if ($menum->katID == $id) {
if($index==0){
echo '<ul>';
}
echo '<li><a href="">'.((checkSub($menuSonuc, $menum->id))?'<span class="sagok"></span>':''). $menum->baslik . '</a>';
kategoriler($menuSonuc, $menum->id);
echo '</li>';
$index++;
}
}
if($index>0){
echo '</ul>';
}
}
}