首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在foreach循环中重置计数器

在foreach循环中重置计数器
EN

Stack Overflow用户
提问于 2015-12-01 21:25:50
回答 2查看 695关注 0票数 0

我正在尝试创建一个简单的foreach循环,它将对数组中的每16条记录进行分组。我也有另一个计数器($s),我需要在4后重新处理。

这是我的密码

代码语言:javascript
复制
$a = array(
  'book-1' => 'Book Title 1',
  'book-2' => 'Book Title 2',
  'book-3' => 'Book Title 3',
  'book-4' => 'Book Title 4',
  'book-5' => 'Book Title 5',
  'book-6' => 'Book Title 6',
  'book-7' => 'Book Title 7',
  'book-8' => 'Book Title 8',
  'book-9' => 'Book Title 9'
);

$i = 1;
$bookshelf = 1;
$s=0;
foreach ( $a as $k => $v ) 
{

    if ($i == 9 || $i == 1)
    {  
      echo '<div id="bookshelf-'.$bookshelf.'"></div>';
      $bookshelf++;
    }


    if ($i%4 == 1)
    {  
      echo '<div class="bookshelf-bottom">';
    }

    if ($i > 5)
    {  
      $s=0;
    }

    $s++;

    echo '<div class="book-frame-'.$s.'">'.$v.'</div>';

    if ($i%4 == 0)
    {
      echo '</div>';
    }

    $i++;
}
if ($i%4 != 1) echo '</div>';

我想出口的是:

代码语言:javascript
复制
<div id="bookshelf-1" class="bookshelf-top"></div>

<div class="bookshelf-bottom">
<div class="book-frame-1">Book Title 1</div>
<div class="book-frame-2">Book Title 2</div>
<div class="book-frame-3">Book Title 3</div>
<div class="book-frame-4">Book Title 4</div>
</div>

<div class="bookshelf-bottom">
<div class="book-frame-1">Book Title 5</div>
<div class="book-frame-2">Book Title 6</div>
<div class="book-frame-3">Book Title 7</div>
<div class="book-frame-4">Book Title 8</div>
</div>

<div class="bookshelf-bottom">
<div class="book-frame-1">Book Title 9</div>
</div>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-01 21:39:29

看一看

代码语言:javascript
复制
<?php
$a = array(
    'book-1' => 'Book Title 1',
    'book-2' => 'Book Title 2',
    'book-3' => 'Book Title 3',
    'book-4' => 'Book Title 4',
    'book-5' => 'Book Title 5',
    'book-6' => 'Book Title 6',
    'book-7' => 'Book Title 7',
    'book-8' => 'Book Title 8',
    'book-9' => 'Book Title 9'
);

$i = 1;
$bookshelf = 1;
$s=0;
foreach ( $a as $k => $v ) {
    $s++;
    if ($i == 9 || $i == 1) {
        if($i == 1)
            echo '<div id="bookshelf-'.$bookshelf.'" class="bookshelf-top"></div>';
        else
            echo '<div id="bookshelf-'.$bookshelf.'"></div>';
      $bookshelf++;
    }
    if($s == 1)
        echo '<div class="bookshelf-bottom">';
    echo '<div class="book-frame-'.$s.'">'.$v.'</div>';
    if($s == 4) {
        echo '</div>';
        $s = 0;
    }
    $i++;
}
?>
票数 1
EN

Stack Overflow用户

发布于 2015-12-01 21:32:40

如果代码变得更加复杂,您这样做的方式将是非常难以理解的。相反,我会做这样的事情:

代码语言:javascript
复制
$a = array(
  'book-1' => 'Book Title 1',
  'book-2' => 'Book Title 2',
  'book-3' => 'Book Title 3',
  'book-4' => 'Book Title 4',
  'book-5' => 'Book Title 5',
  'book-6' => 'Book Title 6',
  'book-7' => 'Book Title 7',
  'book-8' => 'Book Title 8',
  'book-9' => 'Book Title 9'
);

$i = 1;
$bookshelf = 1;
foreach ( array_chunk($a, 4) as $section ) 
{
    echo '<div class="bookshelf-bottom">';
    foreach( $section as $k => $v ) 
    {
        // Output this for the first and last item. I'd recommend taking this out of the foreach or restructuring this somehow to avoid the manual check.
        if ($i == 9 || $i == 1)
        {  
          echo '<div id="bookshelf-'.$bookshelf.'"></div>';
          $bookshelf++;
        }
        $i++;

        // Output this book.
        echo '<div class="book-frame-'.$s.'">'.$v.'</div>';
    }
    echo '</div>';
}

这将使用array_chunk创建节,然后在节中迭代以生成html。

编辑:如果您想要包含一个包含更多值和需要生成更多HTML的完整数组,我很乐意修改这个前端,并解释它是如何工作的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34030485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档