2016-06-20 39 views
0

有人可以幫助我重新寫:找到最低數量的數組,但跳過零

public function allOutOfStockShows() 
{ 

    $out_of_stock_shows = 999; 

    foreach ($this->variants as $variant){ 

     if (!$variant->out_of_stock_shows) { continue; } 

     if ($variant->out_of_stock_shows < $out_of_stock_shows) { $out_of_stock_shows = $variant->out_of_stock_shows; } 

    }; 

    if ($out_of_stock_shows == 999) { return 'Out Of Stock'; } 

    return config('site.out_of_stock_shows')[$out_of_stock_shows]; // eg '2-3 days','3-5 days' 
} 

的爲(整數)值$ variant-> out_of_stock_shows的範圍可以從0-12,所以我開始「最高」號碼是我從空中撥出的號碼 - 999 - 然後我會拍攝一個較低的值,如你所見。它工作但感覺不對,我該如何接近這個?

+1

爲什麼不直接使用排序()功能?它會將您的值從最小到最大排序。所有你需要做的,然後將抓住第一個 – Osuwariboy

+0

我沒有想到這一點的唯一原因是因爲我的大腦今天沒有幫助。謝謝你,先生。 –

回答

1

也許如果你轉換爲數組並使用min()函數;

$out_of_stock_shows = array_map( 
    function($item) { 
     return $item->out_of_stock_shows; 
    }, $this->variants); 

$out_of_stock_shows = min(array_filter($out_of_stock_shows)); 
0

感謝鄉親 - 使用laravel的藏品我刪除所有「0」的元素,排序的數組,看着什麼是在陣列的頂部:

public function allOutOfStockShows() 
{ 
    $variants = $this->variants->reject(function ($variant){ 

     return $variant->out_of_stock_shows === 0; 

    })->sortBy('out_of_stock_shows'); 

    if (isset($variants->first()->out_of_stock_shows)) { 

     return config('site.out_of_stock_shows')[$variants->first()->out_of_stock_shows]; 

    } 

    return "Out Of Stock"; 

}