Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中Foreach break和continue_Php_Foreach_Break - Fatal编程技术网

在PHP中Foreach break和continue

在PHP中Foreach break和continue,php,foreach,break,Php,Foreach,Break,我面临一个问题。我在PHP中构建了一个foreach循环: <?php $show = false; ?> <?php foreach ($this->items as $item) : ?> 通过在foreach中放置数组\u切片,您可以控制要显示的项目。 所以在下一节课上,我想展示21到36项,我唯一要做的就是把0和20改成,20,36 为了澄清我在寻找什么,我有三个div,我想在其中回显一些项目。如果用户在第一个目录中折叠一个div,则会显示前20个项目

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

 <?php $show = false; ?>
 <?php foreach ($this->items as $item) : ?>
通过在foreach中放置
数组\u切片
,您可以控制要显示的项目。 所以在下一节课上,我想展示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使用
继续

中断
中断并停止循环<代码>继续
跳过循环中的其余代码,并跳到下一个迭代

在我看来,使用
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>';
}
$keys=array\u keys($this->items);
$keysLength=计数($keys);
回声';
对于($i=0;$iitems[$keys[$i]];
}
回声';
如果($keysLength>=20){
回声';
对于($i=20;$iitems[$keys[$i]];
}
回声';
}
注意:这将适用于
$This->items
中任意数量的项目。如果低于20,它将跳过接下来的16,如果高于36,它将忽略其余部分。

您可以使用获取$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
等等。


<?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>
$stockNotNull=StockDetail::where('sku',10101001)
->其中('stock_quantity','>',0)->get('stock_id','stock_quantity');
$toSell=14;
//每$stockNotNull只递减一次
foreach($stockNotNull作为$product){
如果($toSell<1){
返回;
}
$product->减量(“库存数量”);
//$product->库存数量--;返回值为空
//转储($product->库存\数量);
$product->save();
$toSell--;
//倾销($toSell);
如果($product->stock_数量===0){
继续;
}
}

这就是我到目前为止得到的,以通常的方式递减,即$variable——给我一个空值,$product->decrement('stock_quantity')在每次运行时减去1,即使stock_quantity字段远大于$toSell变量。逻辑就在我的脑海里,我只是很难从当前项目中提取数量,并且只有当库存数量为0时才能转到下一个项目。

+1用于检查
$this->items
的实际长度。我太懒了,不能这么做:汉克斯!它为可能的解决方案提供了一个很好的视角!但我面临着另一个“问题”,我使用了一个组件生成器,为我节省了大量开发这个组件的工作,而我正试图在Joomla 3.1上构建这个组件。所以我面对的是,在foreach循环之后
$itemsDiv1 = array_slice($this->items, 0, 20);  // gives first 20 items
$itemsDiv2 = array_slice($this->items, 20, 16); // gives next 16 items
<?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>
$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;
            }
        }