我有这样的功能:
<?php
function keepInRange($n){
$min = 5;
$max = 15;
if ( $n < $min ) {
$res = $min;
} elseif ( $n > $max ) {
$res = $max;
} else {
$res = $n;
}
return $res;
}
它始终返回$min
和$max
之间的数字。它也有效,但对我来说看起来并不干净。我认为它可以更好(没有那些条件)。我知道如何让它更短更干净?
答案 0 :(得分:3)
如果您尝试缩短(可能更干净)并删除这些if
语句,则可以使用max()
和min()
函数:
function keepInRange($n){
$min = 5;
$max = 15;
return max(min($max, $n), $min);
}
同样如@admcfajn所述,您可以传递$min
和$max
作为参数,以使该功能更灵活:
function keepInRange($n, $min = 5, $max = 15){
return max(min($max, $n), $min);
}
答案 1 :(得分:0)
绝对不是最好的方法,你可以使用Rand()来生成特定范围之间的数字。
试试这个
print rand(10, 30) . "";
它将生成并打印10到30之间的随机数(包括10到30)。
答案 2 :(得分:0)
我认为它可以更好(没有这些条件)。我知道如何让它更短更干净?
如果你想要它没有明确的条件,那么你可以简单地使用min()和max():
function keepInRange2($n) {
$min = 5;
$max = 15;
return max($min, min($max, $n));
}
乍一看函数和参数的顺序可能看起来很奇怪 - 但由于你希望15是最大值,我们需要得到15的最小值无论价值是多少 - 然后反过来至少5。
答案 3 :(得分:-1)
使用三元运算符可以实现更清洁。
function keepInRange($n){
$min = 5;
$max = 15;
return ( $n < $min ) ? $min : (( $n > $max ) ? $max : $n);
}