如何保持特定范围内的数字?

时间:2017-11-05 06:30:15

标签: php function

我有这样的功能:

<?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之间的数字。它也有效,但对我来说看起来并不干净。我认为它可以更好(没有那些条件)。我知道如何让它更短更干净?

4 个答案:

答案 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);
}
相关问题