Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在高于某个数字的数组中获取最小值?_Php - Fatal编程技术网

Php 如何在高于某个数字的数组中获取最小值?

Php 如何在高于某个数字的数组中获取最小值?,php,Php,我有这样一个数组: [5229561]=> 8 [5229582]=> 9 [5229583]=> 10 [5229584]=> 11 [5229561]=>8 [5229582]=> 9 [5229583]=> 10 [5229584]=>11 等 如何获得大于/等于10的最小值 所以,在这个例子中,它会给我5229583。我知道min()函数,但我不确定如何获得大于10的值。如果数组已排序且键是连续的(例如100101102 no 78,5,13),则可以使用二进制搜索 过度使用你不能比线性

我有这样一个数组:
[5229561]=> 8
[5229582]=> 9
[5229583]=> 10
[5229584]=> 11
[5229561]=>8
[5229582]=> 9
[5229583]=> 10
[5229584]=>11

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


所以,在这个例子中,它会给我5229583。我知道min()函数,但我不确定如何获得大于10的值。

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

过度使用你不能比线性搜索更快

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

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

如果($v>=10&&(is_null($curbest)| |$v需要为此评估数组,可以使用以下几种方法:

为了简单(而不是装腔作势),我将向您展示学习用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):


您可能只想对数组进行排序(如果需要保持键不变,请使用
ksort
),然后迭代,直到找到>=最小值

像这样:

函数findMinValue高于($array,$min)
{
排序($array)#谢谢!
如果($v>=$min)返回$v,则foreach($v数组为$v);
}

是的,它保证是唯一的,因为它不存在特定的函数,我认为最快的方法是线性搜索(对于。基本线性搜索速度较慢。此外,对return bool进行排序,然后您尝试对其进行排序。实际上,我只是在我的函数和基本线性搜索之间进行了轮次测试。我的函数大约快50倍。除非我的测试做错了,否则这是可能的(我刚刚下了夜班;)。@sharpner:只有一个附加变量。O(n)当然是时间复杂性。
$output = array_filter($input_array,function ($var) {
    return ($var >= 10);
});