查找数组中的最小数字但跳过零

时间:2016-06-20 17:09:52

标签: php

有人可以帮我重新写一下:

 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-&gt; out_of_stock_shows的值可以在0-12之间,所以我开始将'最高'数字作为我从空中拔出的数字 - 999 - 然后我开始拍摄较低的数字你可以看到价值。它有效,但感觉不对,我该怎么接近这个?

2 个答案:

答案 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 ) );

答案 1 :(得分:0)

谢谢大家 - 使用laravel的收藏品我删除了所有&#34; 0&#34;元素,对数组进行排序并查看数组顶部的内容:

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

 }