如何根据数字范围获取(固定)值

时间:2018-07-20 14:25:08

标签: php

我有一个号码,例如$humidity

我需要检查该数字的值,如果数字在预定范围内,则需要获取固定值。

例如

if ($humidity<30) {
  return 'dry';
}
if ($humidity>=30 && $humidity <=40) {
 return 'wet'
}
if ($humidty>40 && $humidity<70) {
 return 'confortable'
}

以此类推。

还有不使用4/5个不同的if的可能性吗?

3 个答案:

答案 0 :(得分:4)

只要按顺序处理这些值,就不需要每个范围的上限值和下限值。然后,您可以利用短路并将所有内容放入一个循环中:

function nameOf($humidity)
{
    $list = [
        30 => 'dry',
        40 => 'wet',
        70 => 'comfortable',
    ];
    foreach ($list as $value => $name) {
        if ($humidity < $value) {
            return $name;
        }
    }
    return 'default';
}

答案 1 :(得分:3)

我认为switch非常适合这种用法:

$result = null;

switch(true) {
    case $humidity < 30:
        $result = 'dry';
        break;

    case $humidity >= 30 && $humidity < 40:
        $result = 'wet';
        break;

    case $humidty > 40 && $humidity < 70:
        $result = 'comfortable';
        break;
}

return $result;

答案 2 :(得分:0)

您可以为您的临时创建一个范围数组,然后通过array_walk查找合适的范围。

$h=40;
$harr = [ 0 => 'dry', 1 => 'wet', 2 => 'confy'];
$range = array_flip(range(0, 100, 30));
array_walk($range, 'findHumidity', $range);
var_dump($harr[$result]);

function findHumidity($value, $key, $r){
    global $h; //if you using a class and properties you can ignore these two lines
    global $result;
    $normalRange = array_flip($r);
    if($h> $key && $normalRange[$value+1]!=null && $h<= $normalRange[$value+1]){
        $result = $value;
    }
}

工作示例:https://3v4l.org/fWLDu(简化版本:https://3v4l.org/ROjWk) 或者您可以手动定义范围数组,例如:https://3v4l.org/B0oTU