我有以下内容
$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 行。
谢谢大家。
function closest($array, $number) {
sort($array);
foreach ($array as $a) {
if ($a >= $number) return $a;
}
return end($array) // or return NULL;
}
从 查找数组中大于或等于 N 的数字