dongsuoying9059 2016-07-01 17:10
浏览 58
已采纳

php foreach包装每2个div

I need to wrap every 2 divs with another div for a project (a row) so it will look like:

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

I have tried a few solutions but they dont work since the items coming in are odd (9 items). Here is what I had:

<?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;
     }
}
?>

This works except the second to last row has 3 items even though it dispays the "count" as 2 when I echo it out so it should reset but doesnt. So its:

<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>
  • 写回答

2条回答 默认 最新

  • dppfxf909679 2016-07-01 17:56
    关注

    You should open and close your <rows/> in the books loop, and add a late check for odd books:

    <?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>";
    }
    ?>
    

    Doing so, your $count variable will be incremented only when foreach($books AS $book) loop is run (thus you have at least one book to print)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?
  • ¥15 讲解电路图,付费求解