簡體   English   中英

如何獲得大於一定數值的數組中的最小值?

[英]How can I get the min value in an array above a certain number?

我有一個像這樣的數組:

[5229561]=> 8
[5229582]=> 9
[5229583]=> 10
[5229584]=> 11
等等

如何使最小值大於/等於10?

因此,在這個示例中,它將給我5229583。我知道min()函數,但是我不確定如何獲取大於10的值。

如果數組已排序並且鍵是連續的(例如100,101,102否78,5,13),則可以使用二進制搜索。

總的來說,您不能比線性搜索快得多。

帶O(1)額外內存使用量的代碼:

$curbest=null;
foreach($data as $k => $v){
    if($v>=10 && (is_null($curbest) || $v<$data[$curbest]))
        $curbest=$k;
}

您需要為此評估數組,可以使用多種方法:

為了簡單起見(而不是幻想),我將向您展示學習PHP的最簡單方法。

$input_array = array('5229561' => 8,
                     '5229582' => 9,
                     '5229583' => 10,
                     '5229584' => 11);

foreach ($input_array as $key => $value) {
    if($value >= 10) {
        $output[$key] = $value;
    }
}

$輸出將是:

array (
      '5229583' => 10,
      '5229584' => 11
      )

希望能有所幫助

編輯補充:(由於下面的RiaD帖子)另一種簡單的方法可以做到這一點。

function greaterTen($var) {
    return ($var >= 10);
}

$output = array_filter($input_array,"greaterTen");

甚至(從php5.3開始):

$output = array_filter($input_array,function ($var) {
    return ($var >= 10);
});

您可能只想對數組排序(如果需要鍵保持不變,請使用ksort ),然后進行迭代直到找到> =最小值。

像這樣:

    function findMinValueAbove($array, $min)
    {
      sort($array); # Thanks!
      foreach ($array as $v) if ($v >= $min) return $v;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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