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);
});