我有一个这样的数组:
[5229561]=> 8
[5229582]=> 9
[5229583]=> 10
[5229584]=> 11
等
如何获得大于/等于10的最小值?
所以,这个例子,它会给我5229583.我知道min()函数,但我不知道如何得到一个大于10的值。
答案 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;
}