我创建了一个数组,其中包含“最大”值。
$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
不过,当500
为$speed
时,以上内容就是10
。
有人可以帮忙吗?
答案 0 :(得分:4)
您的代码有两个问题。首先,对sort
的调用将重写用于比较的$management
数组的所有键;您需要使用ksort
而不是按键而不是按值排序。其次,由于键是按升序排列的,因此一旦键值大于$speed
,它们都将成为键,因此一旦找到更高的值,就需要从循环中break
。尝试以下方法:
$r= '';
ksort($management);
foreach($management as $mgmt => $name) {
if($mgmt >= $speed) {
$r= $name;
break;
}
}
echo $r;
答案 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