所以我有一个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 »</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个元素,因此它生成了2个具有行类的div
,内部是3个具有span4
的div
。类行的第三个div只包含类span4
的2个div
。
现在,当我尝试在web服务器上运行它时,它返回一个空页面,没有任何HTML标记或PHP错误。我非常确信我的php error_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 »</a></p>
<?php endif ?>
<?php next($headings); ?>
<?php $i++; ?>
</div> <!-- end of div.span4 -->
<?php endfor; ?>
</div> <!-- end of div.row -->
<?php endfor; ?>
但我仍然想知道,在逻辑上应该是好的情况下,为什么有问题的代码不起作用。
我是遗漏了什么,还是代码Igniter阻止了这种嵌套循环。是虫子吗?
提前感谢您的回答!。
以下是如何只检查元素索引
<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 »</a></p>
<?php next($headings); ?>
<?php $i++; ?>
</div> <!-- end of div.span4 -->
<?php endfor; ?>
</div><!-- end of div.row -->
EDIT我刚刚意识到你有字符串索引,所以我更新为使用for
循环而不是foreach
编辑2
你的第一个代码没有返回任何东西的原因是,当你第一次从while中断时,也就是当$i==3时,你陷入了一个无限循环,在你的下一次for
迭代中,while条件没有得到满足,并且由于你的$i++在while内,$i的值现在永远停留在3 上