0

所以我有一个codeigniter视图文件,里面有这样的代码:

  <?php for($i=1; $i <= count($headings); ): ?>
      <div class="row">
      <?php while(($i%3) != 0 ): ?>
          <div class="span4">
          <?php $heading = current($headings); ?>       
              <h2><?= key($headings); ?></h2>
              <p><?= $heading['description']; ?></p>
              <p><a class="btn" href="<?= $heading['link']; ?>">View details &raquo;</a></p>  
              <?php next($headings); ?>
              <?php $i++; ?>
           </div> <!-- end of div.span4 -->
           <?php endwhile; ?>
       </div> <!-- end of div.row -->
   <?php endfor; ?>

我想在这里实现的是($headings)按三个循环遍历数组。我想制作这样的东西:

<div class="row">
    <div class="span4"><!-- $heading element --></div>
    <div class="span4"><!-- $heading element --></div>
    <div class="span4"><!-- $heading element --></div>
</div>
<div class="row">
    <div class="span4"><!-- $heading element --></div>
    <div class="span4"><!-- $heading element --></div>
    <div class="span4"><!-- $heading element --></div>
</div>
<div class="row">
    <div class="span4"><!-- $heading element --></div>
    <div class="span4"><!-- $heading element --></div>
</div>\

在上面的例子中,$heading数组包含 8 个元素,所以它产生 2div和一个类的 row ,里面是 3div的一个类span4。类行的第三个 div 仅包含 2div个类span4

现在,当我尝试在 Web 服务器上运行它时,它返回一个空页面,没有任何 HTML 标记或 PHP 错误。而且我很确定我的 phperror_reporting设置为E_ALL. 试图删除它并且页面加载正常(当然没有相关代码应该创建的div)。

我通过使用不同的逻辑来解决这个问题。见下文

<?php for($i=1; $i <= count($headings); ): ?>
<div class="row">
    <?php for($k=1; $k <= 3; $k++): ?>
    <div class="span4">
        <?php $heading = current($headings); ?>
        <?php if ($heading !== false): ?>
            <h2><?= key($headings); ?></h2>
            <p><?= $heading['description']; ?></p>
            <p><a class="btn" href="<?= $heading['link']; ?>">View details &raquo;</a></p>
        <?php endif ?>
        <?php next($headings); ?>
        <?php $i++; ?>
    </div> <!-- end of div.span4 -->
    <?php endfor; ?>
</div> <!-- end of div.row -->
<?php endfor; ?>

但我仍然想知道为什么有问题的代码在逻辑上应该没问题时不起作用。

我是否遗漏了什么或者 codeIgniter 是否阻止了这种方式的嵌套循环。它是一个错误吗?

提前感谢您的答案!

4

1 回答 1

1

这是您只需检查元素索引即可完成的方法

<div class="row">
<?php for($i=0; $i < count($headings); ): ?>
    <?if($i > 0 && $i%3 == 0):?>
        </div><!-- end of div.row -->
        <div class="row">
    <?endif?>
    <div class="span4">
    <?php $heading = current($headings); ?>       
        <h2><?= key($headings); ?></h2>
        <p><?= $heading['description']; ?></p>
        <p><a class="btn" href="<?= $heading['link']; ?>">View details &raquo;</a></p>  
        <?php next($headings); ?>
        <?php $i++; ?>
    </div> <!-- end of div.span4 -->
<?php endfor; ?>
</div><!-- end of div.row -->

编辑我刚刚意识到你有字符串索引,所以我更新为使用for循环而不是foreach

编辑 2

您的第一个代码没有返回任何内容的原因是,当您第一次从 while 中断时,即 $i == 3 时,您陷入了无限循环,请在下for一次迭代中查看 while 条件不满足,因为您的$i++ 在里面,而 $i 的值现在永远停留在 3

于 2013-07-31T07:21:08.673 回答