Foreach中断并在PHP中继续

问题描述 投票:4回答:5

我面临一个问题。我已经在PHP中建立了一个foreach循环:

 <?php $show = false; ?>
 <?php foreach ($this->items as $item) : ?>

但是我想回显前20个项目,然后继续以下16个项目。

我设法使它在20个项目后可以休息一下,但是我没有得到以下16个项目(从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) : ?>

通过将array_slice放在foreach中,您可以控制要显示的项目。因此,在下一个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;

与循环相比,我该如何管理呢?还是您建议其他方式?

谢谢!真的帮助我了解了循环!

php foreach break
5个回答
7
投票

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,则将忽略其余部分。


2
投票

不要使用break;使用继续;


2
投票

您可以使用array_slice获得$ this-> items数组的一部分,并将其分配给3个不同的变量,并分别对其进行循环。

$itemsDiv1 = array_slice($this->items, 0, 20);  // gives first 20 items
$itemsDiv2 = array_slice($this->items, 20, 16); // gives next 16 items

依此类推..


1
投票
<?php $i = 0; ?> 

<!-- first group -->
<div>

<?php foreach ($this->items as $item) : ?> 
<?php
/**
 * Check if count divided by 20 has no remainder
 */
if ( (++$i % 20) == 0 ): ?>

</div>
<!-- start new group -->
<div>

<?php endif ?>
<?php endforeach ?>

<!-- end last group -->
</div>

0
投票
$stockNotNull = StockDetail::where('sku', 10101001)
            ->where('stock_quantity', '>', 0)->get('stock_id', 'stock_quantity');
        $toSell = 14;
        // decrements just once for each $stockNotNull
        foreach ($stockNotNull as $product) {
            if ($toSell < 1) {
                return;
            }
            $product->decrement('stock_quantity');
//            $product->stock_quantity--; returns with a null
//            dump($product->stock_quantity);
            $product->save();
            $toSell--;
//            dump($toSell);
            if($product->stock_quantity === 0) {
                continue;
            }
        }

这是我到目前为止所得到的,以通常的方式递减,即$ variable--给我一个空值,$ product-> decrement('stock_quantity')在每次运行中都减去1,即使stock_quantity字段更大而不是$ toSell变量。我脑子里有逻辑,只有在stock_quantity为0时,我才难以从当前物料中提取数量并转移到下一个。

© www.soinside.com 2019 - 2024. All rights reserved.