我有以下
$ a = [100,90,80,70,60,50,40,30,20,10]
$ v = 45
我需要简单的方法在$ a
中找到$ v中最接近的较大/较小元素有什么想法吗?
被修改
这就是为什么我不喜欢我的想法
<?php
$a = [100, 90, 80, 70, 60, 50, 40, 30, 20, 10];
$v = 45;
$a[] = $v;
sort($a);
$nearestGreater = null;
$nearestLower = null;
foreach ($a as $key => $val) {
if ($val == $v) {
$nearestGreater = (isset($a[$key + 1])) ? $a[$key + 1] : $nearestGreater;
$nearestLower = (isset($a[$key - 1])) ? $a[$key - 1] : $nearestLower;
break;
}
}
var_dump($nearestGreater);
var_dump($nearestLower);
unset($a);
这段糟糕的代码是我的,并且正在运行,但我需要知道是否有更好的解决方案(更简单)。
我不天生就有PHP书籍,我还在学习。如果你不喜欢我的问题,请跳过它。我不需要你的傲慢回答。
回到业务
任何人都可以改进这段代码,以便更快地运行?我们假设$ a是我的数据库中的2000000行。
谢谢大家。
答案 0 :(得分:0)
function closest($array, $number) {
sort($array);
foreach ($array as $a) {
if ($a >= $number) return $a;
}
return end($array) // or return NULL;
}
来自Find number which is greater than or equal to N in an array