如何在一个数字以上的数组中获取最小值?

时间:2011-10-24 16:42:19

标签: php

我有一个这样的数组:

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

如何获得大于/等于10的最小值?

所以,这个例子,它会给我5229583.我知道min()函数,但我不知道如何得到一个大于10的值。

3 个答案:

答案 0 :(得分:0)

如果数组已排序且键是连续的(例如100,101,102 no 78,5,13),则可以使用二进制搜索。

过度你不能比线性搜索更快地完成它。

使用O(1)额外内存使用的代码:

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

答案 1 :(得分:0)

您需要为此计算数组,您可以使用多种方法:

为了简单(而不是想要花哨),我将向您展示学习在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
      )

希望有所帮助

EDIT增加:(由于下面的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);
});

答案 2 :(得分:0)

您可能只想对数组进行排序(如果您需要保持相同的键,请使用ksort),然后迭代直到找到&gt; =最小值。

像这样:

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