foreach каждые 3 положить внутри новой ul

На самом деле у меня есть этот цикл foreach:

<ul> <?php foreach ( $tasks as $task ) { ?> <li> ... </li> <?php } ?> </ul> 

Он возвращает:

 <ul> <li>...</li> <li>...</li> <li>...</li> <li>...</li> ... </ul> 

Теперь мне нужно изменить цикл, чтобы поместить все 3 <li> в новый <ul> , чтобы я мог:

 <div> <ul> <li>...</li> <li>...</li> <li>...</li> </ul> <ul> <li>...</li> <li>...</li> <li>...</li> </ul> ... </div> 

Как мне изменить цикл foreach для достижения этого результата?

Это должно сработать для вас:

Просто array_chunk() ваш массив в куски 3, а затем implode() каждый subArray, например

 <div> <?php foreach (array_chunk($tasks, 3) as $task) { echo "<ul><li>" . implode("</li><li>", $task) . "</li></ul>"; } ?> </div> 

попробуй это

 foreach (array_chunk($arrays, 3, true) as $array) { echo '<ul>'; foreach($array as $value) { echo "<li>".$value."</li>"; } echo '</ul>'; } 

Попробуйте это.

 <ul> <?php foreach ( $tasks as $k=>$task ) { ?> <?php if($k % 3 == 1) { ?> <ul> <?php } ?> <li></li> <?php if($k % 3 == 0) { ?> </ul> <?php } ?> <?php } ?> </ul> 

Мне нравится ответ @ Rizer123 для консистенции, но если вы хотите продолжать перебирать отдельные элементы, а не переделывать (например, если вам нужно выполнить некоторые манипуляции с отдельными элементами), я бы предложил примерно следующее:

 <ul> <?php foreach ( array_values($tasks) as $k => $task ) { if($k % 3 == 0) { ?> <ul> <?php } ?> <li> ... </li> if($k % 3 == 2) { ?> </ul> <?php } ?> <?php } ?> </ul>