在php数组中选择最近的大/小元素

时间:2015-02-01 14:20:35

标签: php arrays

我有以下

$ 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行。
谢谢大家。

1 个答案:

答案 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