在PHP中Foreach break和continue
我面临一个问题。我在PHP中构建了一个在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个项目
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;
}
}