2016-06-20 4 views
0

Kann mir diese neu schreiben jemand helfen:die niedrigste Zahl in einem Array zu finden, aber das Überspringen Null

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' 
} 

Die Werte für die (integer) $ varianten> out_of_stock_shows kann ich anfangen reichen von 0-12 so die "höchste" Zahl ist eine Zahl, die ich aus der Luft gezogen habe - 999 - und dann schieße ich auf einen niedrigeren Wert, wie Sie sehen können. Es funktioniert, fühlt sich aber falsch an, wie soll ich mich diesem nähern?

+1

Warum nicht einfach die Art verwenden() Funktion? Es würde Ihre Werte vom kleinsten zum größten sortieren. Alles, was Sie tun müssten, wäre dann die erste – Osuwariboy

+0

Der einzige Grund, warum ich nicht daran gedacht habe, ist, weil mein Gehirn heute nicht hilfreich ist. Danke mein Herr. –

Antwort

1

Vielleicht, wenn Sie in Array konvertieren und min() Funktion verwenden;

$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

Dank Leute - Laravel der Sammlungen mit mir alle „0“ Elemente entfernen, sortierte das Array und sah, was an der Spitze des Feldes ist:

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"; 

} 
Verwandte Themen