php - Foreach 在 PHP 中中断并继续

标签 php foreach break

我遇到了一个问题。我在 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 跳过循环中的其余代码,并跳转到下一个迭代。

在我看来,使用 breakcontinue 是错误的做法。我会简单地使用两个 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/

相关文章:

PHP的password_hash() : public one-time salt vs.私有(private)固定盐

php - 跳过 MySQL INSERT 的正确方法是什么

java - 如何在 Java 中中断/退出不同级别的方法调用

java - 中断类Main,如果该方法返回 "false"

php - MySQL:多重查询不执行第二个和第三个附加查询

php - 我怎样才能解决这个mysql搜索查询

list - Makefile - 遍历列表并选择特定值

winapi - 使用 Windows (XP+) api 发送(串行)中断

php - 如何将 jQuery UI 添加到 Asset Bundle

c++ - Makefile 中的 foreach 找不到所有文件