2017-11-05 22 views
0

私はこのような機能を持っている:特定の範囲内で番号を保持するにはどうすればよいですか?

<?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間の数を返します。それは同様に機能しますが、私にとって専門家にとっては清潔ではありません。私はそれがより良いことができると思う(その条件なし)。どのように私はそれを短く、きれいにすることができますか?

答えて

3

、あなたはmax()min()機能を使用することができます言及@admcfajnとしても

function keepInRange($n){ 
    $min = 5; 
    $max = 15; 
    return max(min($max, $n), $min); 
} 

を、引数として$min$maxを渡して、関数をより柔軟にすることができます。

function keepInRange($n, $min = 5, $max = 15){ 
    return max(min($max, $n), $min); 
} 
+0

のためにその逆も当時と - あなたは15 最大値にしたいので、私たちは15の最小を取得し、どのような値が最初にする必要があります引数として 'keepInRange($ n、$ min = 5、$ max = 15) ' – admcfajn

+0

@admcfajnいいアイデア..私はOPが書いたことにちょうど従っていました。 – Shafizadeh

+2

ありがとう@shafizadeh、素敵な解決策。 – admcfajn

0

間違いなく最良の方法です.Rand()を使用して特定の範囲の数値を生成できます。

は、それは10と30の間の乱数(10と30が含まれている)を生成し、印刷します。この

print rand(10, 30) . "";​ 

を試してみてください。あなたは(そしておそらくクリーナー)、それを短くしようとしてともそれらのif文を削除する場合

-1

これは、三元演算子を使用してよりクリーンにすることができます。

function keepInRange($n){ 

    $min = 5; 
    $max = 15; 

    return ($n < $min) ? $min : (($n > $max) ? $max : $n); 
} 
0

私はそれが(その条件なし)良いことができると思います。どのように私はそれを短く、きれいにすることができますか?まあ

明示的な条件なしでそれをしたい場合は、単に(分を使用することができます)とmax():

function keepInRange2($n) { 
    $min = 5; 
    $max = 15; 
    return max($min, min($max, $n)); 
} 

機能やパラメータの順序は、一見奇妙に思えるかもしれない - しかし、私も渡し最小&最大をお勧めしたい最小5.

関連する問題