2012-06-29 4 views
3

Простой вопрос. У меня есть массив из 21 элемента и каждый три из них отображаются внутри блока <div>. Код что-то так:Обертывание 3 объектов за пределами времени/foreach в PHP

<?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 элемент. Думаю, я мог бы count them beforehand и положить последнее в последнем (даже если это группа из одного элемента).

ответ

4

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

$i = 1; 

foreach ($faces as $face) 
{ 
    echo $face; 

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

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

+0

Вам также понадобится 'else' для non-wrapping – Blaster

+0

Я так не думаю. Обертки - это действие, если вы не обертываете, вы в основном делаете что-то нормально. Вам не нужно ничего делать, если вам не нужно обернуть (если вы не создадите свой код таким образом). –

+1

А вы правы, возможно, нужно спать сейчас, уже слишком поздно 2:30 утра, +1. – Blaster

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

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

+1

+1 Удивлен, что это не получило поддержки, тем более, что ОП потребовал последующего ответа, чтобы полностью удовлетворить его ответ; использование array_chunk сначала, возможно, заняло достаточно сложности, чтобы решить его самостоятельно ;-) –

Смежные вопросы