2017-04-18 5 views
1

웹 사이트에 TV 쇼 목록을 한 줄에 3 개의 열로 표시합니다. 3의 배수로 충분한 프로그램이 없으면 빈 슬롯에 대체 콘텐츠를 채우고 싶습니다.3의 배수를 계산하고 빈 슬롯에 대체 내용을 채움

나는 목록을 표시하기 위해 사용하고있는 코드는 다음과 같습니다

<?php $counter = 1; ?> 
<?php foreach ($show_listingsRecords as $record): ?> 
    <?php if($counter % 3 == 0) : ?> 
     <!-- ROW 3 --> 
     <div> ... display name + description + link ...</div> 
    <?php elseif ($counter % 3 == 2) : ?> 
     <!-- ROW 2 --> 
     <div> ... display name + description + link ...</div> 
    <?php elseif ($counter % 3 == 1): ?> 
     <!-- ROW 1 --> 
     <div> ... display name + description + link ...</div> 
    <?php endif; ?>  
    <?php $counter++; ?> 
<?php endforeach ?> 

나는 다음과 같은 조건문을 삽입 시도했다, 그러나 foreach() 루프 레코드 수를 지시하기 때문에 표시 할 작동하지 않습니다 . 슬롯 2 또는 슬롯 2가 & 3이 비어 있으면 대체 컨텐츠를 표시하려면 어떻게합니까?

<?php if(!$show_listingsRecords): ?> 
    Display my alternate content 
<?php endif ?> 
당신은 당신의 코드 뒤에 또 다른 루프를 추가 할 수
+2

, 당신이 달성하기 위해 무엇을 찾고있는. 이미지를 넣는 것이 좋습니다. –

답변

0

모든 처리를 먼저 수행 한 다음 foreach()만을 사용하여 표시하는 것이 좋습니다.

첫 번째 단계는 $show_listingsRecords 어레이를 준비하기 위해 어떤 종류의 수정이 필요한지 확인하는 것입니다.

  • 하위 배열이없는 경우 세 개의 $alternates 하위 배열을 모두 사용해야합니다.
  • 하위 배열 수가 $chunk_size (일괄 처리 당 하위 배열 수)로 균등하게 나뉘 지 않으면 $alternates에서 필요한 양의 부분 배열 만 병합하여 "일괄 처리"를 완료하십시오.

코드 : (Demo)

$show_listingsRecords=array(
    array("name"=>1,"description"=>2,"link"=>3), 
    array("name"=>4,"description"=>5,"link"=>6), 
    array("name"=>7,"description"=>8,"link"=>9), 
    array("name"=>10,"description"=>11,"link"=>12), 
    array("name"=>13,"description"=>14,"link"=>15) 
); 

$alternates=array(
    array("name"=>"backup1A","description"=>"backup1B","link"=>"backup1C"), 
    array("name"=>"backup2A","description"=>"backup2B","link"=>"backup2C"), 
    array("name"=>"backup3A","description"=>"backup3B","link"=>"backup3C") // needed if no listings at all 
); 

$chunk_size=3; // 3 is used in this case 

// conditionally prepare array 
if(!$size=sizeof($show_listingsRecords)){ // if no listings at all (empty array) 
    $show_listingsRecords=$alternates; 
}elseif($over=$size%$chunk_size){ // $over is how many extra elements beyond "even" (0,1,2 in this case) 
    $show_listingsRecords=array_merge($show_listingsRecords,array_slice($alternates,0,$chunk_size-$over)); 
} 

// display 
foreach(array_chunk($show_listingsRecords,$chunk_size) as $batch){ // iterate in batches 
    echo "<div>\n"; 
     foreach($batch as $listing){ // iterate the arrays in the batch 
      echo "\t<div>",implode(' + ',$listing),"</div>\n"; 
     } 
    echo "</div>\n"; 
} 

출력 :

당신은 이해하고, 더 자세한 내용을 둘 필요가
<div> 
    <div>1 + 2 + 3</div> 
    <div>4 + 5 + 6</div> 
    <div>7 + 8 + 9</div> 
</div> 
<div> 
    <div>10 + 11 + 12</div> 
    <div>13 + 14 + 15</div> 
    <div>backup1A + backup1B + backup1C</div> 
</div> 
-1

:

//As long as there is some remainder 
while($counter % 3) { 
    //add desired content 
    switch($counter++ % 3) { 
     case 1: break; 
     case 2: break; 
    } 
} 

A는 또한 모든 미래에 4 열을 사용하기로 결정한 경우 매직 넘버 3. 대신 상수/변수를 사용하는 것이 좋습니다 것입니다 "올바른"숫자 3을 수동으로 확인하고 다시 쓰는 대신 변수를 변경하고 4 번째 열의 조건을 추가해야합니다 (찾기 및 바꾸기는 변경하지 않으려는 코드의 다른 부분에서 숫자 3을 바꿀 수 있음).