Простой вопрос. У меня есть массив из 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
. Вы можете разделить массив на многомерный массив группами по три. Если количество элементов не кратно трем, последний элемент будет содержать все оставшиеся дочерние элементы, сколько бы они ни были.