2012-06-29 6 views
3

간단한 질문. 나는 21 개의 요소로 이루어진 배열을 가지고 있고 그 중 세 개를 <div> 블록 안에 모두 보여줍니다.PHP에서 3 오브젝트 이하를/foreach로 감싸는 것

<?php 
$faces= array(
    1 => 'happy', 
    2 => 'sad', 
    (sic) 
    21 => 'angry' 
); 

$i = 1; 
foreach ($faces as $face) { 
    echo $face; 
    $i++; 
} 

?> 

이 배열은 21 개 요소가없는 경우에 문제가있다 가끔은 24 도착, 타 시간 17 내가 그들 모두 세 포장, 혼자 포장 방법 : 코드는 다음과 같은 뭔가입니다 나머지? switchcase을 사용했지만, 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'가 필요합니다. – Blaster

+0

나는 그렇게 생각하지 않습니다. 랩은 액션입니다. 랩하지 않으면 기본적으로 평범한 행동을합니다. 랩핑하지 않으면 (코드를 그렇게 설계하지 않는 한) 아무 것도 할 필요가 없습니다. –

+1

아, 네가 맞아 아마 지금 잠을 자야 해, 너무 늦었 어 2:30 AM, +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을 사용할 것입니다. 배열을 다차원 배열로 세 그룹으로 나눌 수 있습니다. 요소의 수가 3의 배수가 아닌 경우 마지막 요소에는 나머지 자식 요소가 모두 포함되지만 많은 요소가 포함됩니다.

+1

+1 특히 OP가 자신의 대답을 완전히 만족시키기 위해 후속 질문을 요구했기 때문에 upvoted가되지 않았다는 사실에 놀랐습니다. 먼저 array_chunk를 사용하여 스스로 해결할 수있는 충분한 질문을 던질 수도 있습니다 ;-) –

관련 문제