将数字四舍五入到数组中最接近的值

时间:2019-02-26 10:02:37

标签: php

我创建了一个数组,其中包含“最大”值。

$management = array(
    '100' => '1',
    '500' => '2',
    '1000' => '3',
);

并创建一个循环以查找最接近的值,将其四舍五入。

$speed = 10;

$r= '';
sort($management);
foreach($management as $mgmt => $name) {
    if($mgmt >= $speed) {
        $r= $name;
    }
}
$r= end($management);

因此,在$speed10的地方,它应该拿起阵列键100,如果它是100,它仍然应该拿起100,但是如果速度为200,它将拾取500

不过,当500$speed时,以上内容就是10

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:4)

您的代码有两个问题。首先,对sort的调用将重写用于比较的$management数组的所有键;您需要使用ksort而不是按键而不是按值排序。其次,由于键是按升序排列的,因此一旦键值大于$speed,它们都将成为键,因此一旦找到更高的值,就需要从循环中break。尝试以下方法:

$r= '';
ksort($management);
foreach($management as $mgmt => $name) {
    if($mgmt >= $speed) {
        $r= $name;
        break;
    }
}
echo $r;

Demo on 3v4l.org

答案 1 :(得分:0)

这是有关如何执行此操作的示例:

$array = array(1, 10, 100, 200, 400, 500, 1000);

public function getArrayRoundUp($array, $number) {

sort($array);
foreach ($array as $a) {

if ($a >= $number) return $a;
}
return end($array);
}

$value = 950;
$nearest = getArrayRoundUp($array, $value);
//the expect result will be 1000
echo $nearest;

答案 2 :(得分:0)

使用以下功能

function find(array $array, $search)
{
    $last = null; // return value if $array array is empty

    foreach ($array as $key => $value) {
        if ($key >= $search) {
            return $key; // found it, return quickly
        }
        $last = $key; // keep the last key thus far
    }

    return $last;
}

经过测试并可以正常工作:-

echo find($management, 100); // Will result 100
echo find($management, 200); //Will result 500