我创建了一个包含"最大值"的数组。
$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);
因此,在$speed
10
的地方,它应该拾取数组键100
,如果是100
它仍然应该拾取100
但如果速度200
,它会拾取500
不过,当$speed
10
时,上述内容正在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