我遇到了一个问题。我在 PHP 中构建了一个 foreach
循环:
<?php $show = false; ?>
<?php foreach ($this->items as $item) : ?>
但我想回显前 20 个项目并继续以下 16 个项目。
我设法让它在 20 个项目后休息,但我没有得到以下 16 个项目(从 nr 21 开始)。
这是我目前所拥有的:
<?php $show = false; ?>
<?php $i = $item->id = 1; ?>
<?php foreach ($this->items as $item) : ?>
<?php if(++$i > 20) break; ?>
如果我将 $i
设置为 '21'
,它仍然会显示第 1 项,依此类推。
解决方案##感谢@dhavald
<?php $show = false; ?>
<?php foreach (array_slice ($this->items, 0, 20) as $item) : ?>
通过在 foreach 中放置一个 array_slice
,您可以控制要显示的项目。
所以在下一个 div 我想显示项目 21 到 36,我唯一需要改变的是 0 和 20 变成 , 20, 36
为了阐明我在寻找什么,我有三个 div,我想在其中回显一些项目。如果用户折叠第一个 div,将显示前 20 个项目,如果用户单击 div2,将显示接下来的 16 个项目。
如何更正此代码以实现这一点?
正如我忘记提及的那样,您提供的解决方案确实帮助我理解了这个过程,但是当我使用 Joomla 3.1 的组件生成器时,有一行代码使得调用前 20 个组件变得有点复杂和第二个 16 项。
在foreach循环之后有这行代码
if($item->state == 1 || ($item->state == 0 && JFactory::getUser()>authorise('core.edit.own',' com_ncitycatemus.vraagantwoordtoevoegen.'.$item->id))):
$show = true;
除了循环之外,我如何管理它?或者您有其他建议吗?
提前致谢!真的帮助我理解了循环!!
最佳答案
break
跳出并停止循环。 continue
跳过循环中的其余代码,并跳转到下一个迭代。
在我看来,使用 break
和 continue
是错误的做法。我会简单地使用两个 for 循环:
$keys = array_keys($this->items);
$keysLength = count($keys);
echo '<div id="div1">';
for ($i = 0; $i < min($keysLength, 20); $i++) {
echo $this->items[$keys[$i]];
}
echo '</div>';
if ($keysLength >= 20) {
echo '<div id="div2">';
for ($i = 20; $i < min($keysLength, 36); $i++) { //36 being 20 + 16
echo $this->items[$keys[$i]];
}
echo '</div>';
}
注意:这适用于 $this->items
中任意数量的项目。如果小于 20,它将直接跳过接下来的 16,如果大于 36,它将忽略其余部分。
关于php - Foreach 在 PHP 中中断并继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16654448/