「if」条件がインデックスカウントと一致する場合、出力に余分な空の要素を返すforeachに問題があります。
これは私のコードです
<ul id="toplevel" class="menu">
<?php
foreach($categories as $category){
$parenturl = 'some url'.$category->category_id;
$parentname = $category->category_name;
?>
<li>
<?php echo link($parenturl, $parentname); ?>
<?php if($category->childs) : ?>
<ul>
<li>
<?php echo link($parenturl, $parentname); ?>
<ul>
<?php
$i=0;
foreach($category->childs as $child){
$i++;
$childurl = 'some url'.$child->category_id;
$childname = $child->category_name;
?>
<li><?php echo link($childurl, $childname); ?></li>
<?php
if($i % 10 == 0) :
?>
</ul></li><li><?php echo link($parenturl, $parentname); ?><ul>
<?php
endif;
}
?>
</ul>
</li>
</ul>
<?php endif; ?>
</li>
<?php
}
?>
</ul>
したがって、$ childに正確に10個のアイテムがある場合、これは11個を出力しますが、その理由はわかりません。
出力は次のようになります。
<ul id="toplevel" class="menu">
<li>
<a>Main Category</a>
<ul>
<li>
<a>Main Category</a>
<ul>
<li><a>Sub 1</a></li>
<li><a>Sub 2</a></li>
<li><a>Sub 3</a></li>
<li><a>Sub 4</a></li>
<li><a>Sub 5</a></li>
<li><a>Sub 6</a></li>
<li><a>Sub 7</a></li>
<li><a>Sub 8</a></li>
<li><a>Sub 9</a></li>
<li><a>Sub 10</a></li>
</ul>
</li>
<li>
<a>Main Category</a>
<ul> </ul>
</li>
</ul>
</li>
</ul>
私はカウント数で遊んでいましたが、$ childが設定された数と一致するたびに、もう1つ出力されます。ただし、$ childのアイテム数がカウントより少ないか多い場合は、正常に機能します。
DesignChemicalのjQueryVericalMegamenuを使用していて、このレイアウトが必要なため、HTMLは次のようになります。