![](/img/trans.png)
[英]php file() into foreach - Fatal error: Cannot break/continue 1 level
[英]Foreach break and continue in PHP
我正面臨一個問題。 我在 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
設置$i
'21'
它仍然會回顯第 1 項,依此類推。
<?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
任意數量的$this->items
。 如果它低於 20,它會簡單地跳過接下來的 16,如果它高於 36,它會簡單地忽略其余的。
不要使用break;
使用continue;
您可以使用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
等等..
<?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;
}
}
這是我到目前為止得到的,以通常的方式遞減,即 $variable-- 給我一個空值,$product->decrement('stock_quantity') 在每次運行時減去 1,即使 stock_quantity 字段遠大於$toSell 變量。 這個邏輯就在我的腦海中,我只是在從當前項目中獲取數量並僅在 stock_quantity 為 0 時才移動到下一個項目時遇到問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.