簡體   English   中英

在 PHP 中 Foreach 中斷並繼續

[英]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 項,依此類推。

解決方案## 感謝@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任意數量的$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM