Intereting Posts

Обертывание 3 объектов или менее внутри / в foreach в PHP

Простой вопрос. У меня есть массив из 21 элемента и каждый три из них отображается внутри блока <div> . Код выглядит примерно так:

 <?php $faces= array( 1 => 'happy', 2 => 'sad', (sic) 21 => 'angry' ); $i = 1; foreach ($faces as $face) { echo $face; $i++; } ?> в <?php $faces= array( 1 => 'happy', 2 => 'sad', (sic) 21 => 'angry' ); $i = 1; foreach ($faces as $face) { echo $face; $i++; } ?> 

Проблема заключается в том, что в этом массиве не имеется 21 элемент, иногда он получает 24, а другие – 17. Как я обертываю все три из них и обертываю в одиночку все остальное? Я придумал использование switch и case , но это работает только тогда, когда имеется только 21 элемент. Я думаю, что я мог сосчитать их заранее и положить последнее в последнем (даже если это группа из одного элемента).

У вас уже есть большая часть этого. Все, что вам не хватает, это что-то испытать, если вы готовы к обертке. Поэтому, прежде чем увеличивать $i , попробуйте:

 $i = 1; foreach ($faces as $face) { echo $face; if ($i % 3 == 0) { echo "<br />"; // or some other wrapping thing } $i++; } 

Это гарантирует, что вы будете обертывать каждые 3 лица, оставив остаток в конечном блоке.

 print '<div>'; $i = 1; foreach ($faces as $face) { if ($i % 3 == 0) print '</div><div>'; echo $face; $i++; } print '</div>'; 

Я бы использовал array_chunk . Вы можете разделить массив на многомерный массив группами по три. Если количество элементов не кратно трем, последний элемент будет содержать все оставшиеся дочерние элементы, сколько бы они ни были.