2016-07-01 3 views
0
私はプロジェクト(行)のために、別のdivを持つすべての2つのdivをラップする必要が

ので、それは次のようになります。PHPのforeachのは、すべての2つのdivをラップ

<div class="row"> 
    <div> Item </div> 
    <div> Item </div> 
</div> 
<div class="row"> 
    <div> Item </div> 
    <div> Item </div> 
</div> 

私はいくつかの解決策を試してみましたが、彼らは以来、いけない仕事します入ってくるアイテムは奇数(9アイテム)です。ここで私が持っていたものです:

<?php 
$count = 0; 
foreach ($contents as $content) 
{ 
    //var_dump($content); 
    $books  = $content["tags"]; 
    $book_image = $content['content_image']; 
    $book_desc = $content['content_social_description']; 

    ++$count; 

    if($count == 1) 
    { 
     echo "<div class='et_pb_row'>"; 
    } 

    foreach ($books as $book) 
    { 
     $book_name  = $book['tag_name']; 
     $book_name_trim = str_replace(' ', '-', $book_name); 
     ?> 
     <!-- Inside the Book Loop --> 
     <div class='et_pb_column et_pb_column_1_2 books' style="background: url('https://s3-us-west-2.amazonaws.com/crowdhubproverbs31/<?php echo $book_image ;?>');"> 
      <h2><?php echo $book_name; ?></h2> 
      <p><?php echo $book_desc; ?></p> 
      <?php echo $count; ?> 
     </div> 

     <?php 

    } 

    if ($count == 2) 
    { 
     echo "</div>"; 
     $count = 0; 
    } 
} 
?> 

これは私がそれをリセットしますがdoesntの必要があり、それをエコーするとき、それは2のように「カウント」をdispaysにもかかわらず、3つのアイテムを持っている最後の行に2番目を除いて動作します。だから、その:

<div class="row"> 
    <div> Item </div> "Count 1" 
    <div> Item </div> "Count 2" 
</div> 
<div class="row"> 
    <div> Item </div> "Count 1" 
    <div> Item </div> "Count 2" 
</div> 
<div class="row"> 
    <div> Item </div> "Count 1" 
    <div> Item </div> "Count 2" 
    <div> Item </div> "Count 2" 
</div> 
<div class="row"> 
    <div> Item </div> "Count 1" 
    <div> Item </div> "Count 2" 
</div> 
+0

3つのアイテムがありますか?あなたの最後の商品にクローズド部門がないように見えます。それはオープニングdivしかないので、多分それはちょっと変わって見えるかもしれません。 – KJaeg

+0

メインループで$ count変数を操作しています。つまり、$ 2個のコンテンツ項目ごとに新しい行を作成します。 $ contentにN $本がある場合、同じ$ count値のN倍を出力し、新しい行を作成しません。 2を2回印刷しているコンテンツに関する2つの書籍がありますか? –

+0

それはうまく動作しますが、3行目です。すべての行が正しく閉じています。最初の2行には2つのアイテムがあり、3番目のアイテムには3つのアイテムがあり、4番目のアイテムには2つのアイテムがあります。 – Packy

答えて

0

をあなたは開閉あなた<rows/>を書籍ループで、奇数書籍のレイトチェックインを追加する必要があります

<?php 
$count = 0; 
foreach ($contents as $content) 
{ 
    //var_dump($content); 
    $books  = $content["tags"]; 
    $book_image = $content['content_image']; 
    $book_desc = $content['content_social_description']; 


    foreach ($books as $book) 
    { 
     ++$count; 
     if($count == 1) 
     { 
      echo "<div class='et_pb_row'>"; 
     } 
     $book_name  = $book['tag_name']; 
     $book_name_trim = str_replace(' ', '-', $book_name); 
     ?> 
     <!-- Inside the Book Loop --> 
     <div class='et_pb_column et_pb_column_1_2 books' style="background: url('https://s3-us-west-2.amazonaws.com/crowdhubproverbs31/<?php echo $book_image ;?>');"> 
      <h2><?php echo $book_name; ?></h2> 
      <p><?php echo $book_desc; ?></p> 
      <?php echo $count; ?> 
     </div> 

     <?php 
     if ($count == 2) 
     { 
      echo "</div>"; 
      $count = 0; 
     } 


    } 
} 

if ($count > 0) 
{ 
    echo "</div>"; 
} 
?> 

このようにすると、$count変数は、foreach($books AS $book)ループが実行されたときにのみインクリメントされます(したがって、少なくとも1つのブックが印刷されます)

0

あなたはarray_chunkを活用することができます。

//First make a generator to get all books 
function allBooks($contents) { 
    foreach($contents as $content) {  
     foreach($content['tags'] as $book) { 
      yield $book; //Here you can yield whatever you want ! 
     } 
    } 
} 

//Then create rows 
$itemPerRow = 2; 
$rows = array_chunk(iterator_to_array(allBooks($contents)), $itemPerRow, true); 

//Display all 
foreach($rows as $row) { 
    echo '<row>'; 
     foreach($row as $book) { 
     //Display the book ! 
     } 
    echo '</row>'; 
} 
+0

このコードでは、2つの$ books配列にそれぞれ5つの項目があり、5の代わりに ' 'に出力されます。 – Yuri

+0

正常です!最後の行には1つの項目があります。それはあなたが意味することです! –

+0

私はあなたがコードを更新したという意味を理解しています;)。多分高価かもしれないがエレガント! –

関連する問題