我有一个号码,例如$humidity
我需要检查该数字的值,如果数字在预定范围内,则需要获取固定值。
例如
if ($humidity<30) {
return 'dry';
}
if ($humidity>=30 && $humidity <=40) {
return 'wet'
}
if ($humidty>40 && $humidity<70) {
return 'confortable'
}
以此类推。
还有不使用4/5个不同的if
的可能性吗?
答案 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