2017-04-18 33 views
1

我在行中顯示每行三列電視節目列表。當我沒有足夠的節目以三倍的倍數播放時,我想用空閒的內容填充空插槽。計算三的倍數並填充替代內容的空插槽

我使用的顯示列表中的代碼是:

<?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爲空,如何實現顯示備用內容?

<?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(查找和替換可能會更改您不希望更改的其他代碼部分中的數字3)。