舍入到数组中最接近的值

问题描述 投票:0回答:3

我创建了一个'最大'值的数组。

$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

有人可以帮忙吗?

php
3个回答
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


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;

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
© www.soinside.com 2019 - 2024. All rights reserved.