Разделить цикл PHP на 2 списка

Я построил следующую функцию, но можно ли ее разделить мои списки с одного на более, чтобы я мог иметь максимум 8 <li> 'за <ul> ?

 function buildProductsMenu($base) { $sql = "SELECT * FROM tbl_category"; $result = dbQuery($sql); while ($row = dbFetchAssoc($result)) { echo "<ul>"; echo "<li class='title'>$row[cat_name]</li>"; $sqlProd = "SELECT * FROM tbl_product WHERE cat_id = $row[cat_id]"; $resultProd = dbQuery($sqlProd); while ($rowProd = dbFetchAssoc($resultProd)) { extract($rowProd); echo "<li><a href='".$base."products/".strtolower($row['cat_name'])."/".strtolower($pd_name)."'>".$pd_name."</a></li>"; } echo "</ul>"; } } 

Пошел с jurgemaister Solution

 function buildProductsMenu($base) { $sql = "SELECT * FROM tbl_category"; $result = dbQuery($sql); while ($row = dbFetchAssoc($result)) { echo "<ul>"; echo "<li class='title'>$row[cat_name]</li>"; $sqlProd = "SELECT * FROM tbl_product WHERE cat_id = $row[cat_id]"; $resultProd = dbQuery($sqlProd); $counter = 1; while ($rowProd = dbFetchAssoc($resultProd)) { extract($rowProd); if($counter % 12 == 0) { $counter = 1; echo "</ul><ul style='margin-top:25px;'>"; } echo "<li><a href='".$base."products/".strtolower($row['cat_name'])."/".strtolower($pd_name)."'>".$pd_name."</a></li>"; $counter++; } echo "</ul>"; } } 

Вы можете добавить счетчик, и когда этот счетчик достигнет 8, вы запустите новую ul .

 $counter = 1; while ($rowProd = dbFetchAssoc($resultProd)) { extract($rowProd); if($counter % 8 == 0) { $counter = 1; echo "</ul><ul>"; } echo "<li><a href='".$base."products/".strtolower($row['cat_name'])."/".strtolower($pd_name)."'>".$pd_name."</a></li>"; counter++; } 

Хорошо, вместо того, чтобы отсылать LI прямо из функции, я предлагаю вам добавить их все в массив, как только вещи находятся в массиве, всегда легче управлять.

Используйте array_chunk () в последнем массиве LI, и он разделит его на группы по восемь.