75 votes

si le nombre entier compris dans une plage?

est-il un moyen de tester une gamme sans faire ce code redondant

if ($int>$min && $int<$max)

?

comme une fonction:

function testRange($int,$min,$max){
    return ($int>$min && $int<$max);
}

utilisation:

if (testRange($int,$min,$max)) 

?

N'php ont une telle fonction intégrée? Ou tout autre moyen de le faire?

99voto

Mark Paspirgilis Points 111

Testé votre 3 voies avec une 1000000 de fois en boucle.

t1_test1: ($val >= $min && $val <= $max): 0.3823 ms

t2_test2: (in_array($val, range($min, $max)): 9.3301 ms

t3_test3: (max(min($var, $max), $min) == $val): 0.7272 ms

T1 a été plus rapide, c'est essentiellement ceci:

function t1($val, $min, $max) {
  return ($val >= $min && $val <= $max);
}

48voto

alex Points 186293

Je ne pense pas que vous aurez une meilleure façon que votre fonction.

Il est propre, facile à suivre et à comprendre, et renvoie le résultat de la condition (pas de return (...) ? true : false dégâts).

20voto

TibTibs Points 264
if( in_array( $Int , range( $Min , $Max ) ) )

Donc, si vous vouliez vérifier si 23 ($Int) était supérieure à 12 ($Min), mais moins de 71 ($Max)

if(in_array(23, range(12, 71))) // true

if(in_array(9, range(12, 71)))  // false

L'inconvénient, c'est qu'il est plus laid que votre code d'origine, et probablement certainement prend plus de temps à traiter (voir les commentaires).

16voto

Lars Strojny Points 522

Il n'existe pas de fonction builtin, mais vous pouvez le faire facilement en appelant les fonctions min() et max() de façon appropriée.

// Limit integer between 1 and 100000
$var = max(min($var, 100000), 1);

12voto

user1763377 Points 41

J'ai besoin d'une fonction pour tester si $n était entre $a et $b. La plupart des exemples donnés supposer que la plus basse ($min) est plus petite que la plus haute ($max) Mais dans mon cas, ce pourrait être l'inverse. Mais il y a un moyen simple pour tester. Je base le test dans le fait que ($n-$a) et ($n-$b) ont des signes différents, lorsque $n est entre les deux $a et $b, et le même signe quand les deux sont à l'extérieur de l' $..$b gamme. Cette fonction que j'utilise est valable pour croissant, décroissant, les nombres positifs et négatifs.

function between($n, $a, $b)
{
    return ($n-$a)*($n-$b) < 0;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X