将数字向上舍入到数组中最接近的值



我创建了一个包含"最大值"的数组。

$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

不过,当$speed10时,上述内容正在500

谁能帮忙?

你的代码有几个问题。首先,对sort的调用会重写您用于比较的$management数组的所有键;您需要改用ksort按键而不是值进行排序。其次,由于键是按升序排列的,一旦 1 大于$speed值,它们都将是,因此一旦找到更高的值,就需要从循环中break。试试这个:

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

3v4l.org 演示

这是一个关于如何做到这一点的例子:

$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;

使用以下函数

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

最新更新