Is there a way to test a range without doing this redundant code:
if ($int>$min && $int<$max)
?
Like a function:
function testRange($int,$min,$max){
return ($min<$int && $int<$max);
}
usage:
if (testRange($int,$min,$max))
?
Does PHP have such built-in function? Or any other way to do it?
There's
filter_var()
as well and it's the native function which checks range. It doesn't give exactly what you want (never returns true), but with "cheat" we can change it.I don't think it's a good code as for readability, but I show it's as a possibility:
Just fill
$someNumber
,$min
and$max
.filter_var
with that filter returns either boolean false when number is outside range or the number itself when it's within range. The expression (!== false
) makes function return true, when number is within range.If you want to shorten it somehow, remember about type casting. If you would use
!=
it would be false for number 0 within range -5; +5 (while it should be true). The same would happen if you would use type casting ((bool)
).Imagine that (from other answer):
If user would write empty value (
$userScore = ''
) it would be correct, asin_array
is set here for default, non-strict more and that means that range creates0
as well, and'' == 0
(non-strict), but'' !== 0
(if you would use strict mode). It's easy to miss such things and that's why I wrote a bit about that. I was learned that strict operators are default, and programmer could use non-strict only in special cases. I think it's a good lesson. Most examples here would fail in some cases because non-strict checking.Still I like filter_var and you can use above (or below if I'd got so "upped" ;)) functions and make your own callback which you would use as
FILTER_CALLBACK
filter. You could return bool or even addopenRange
parameter. And other good point: you can use other functions, e.g. checking range of every number of array or POST/GET values. That's really powerful tool.Using comparison operators is way, way faster than calling any function. I'm not 100% sure if this exists, but I think it doesn't.
I don't think you'll get a better way than your function.
It is clean, easy to follow and understand, and returns the result of the condition (no
return (...) ? true : false
mess).There is no builtin function, but you can easily achieve it by calling the functions
min()
andmax()
appropriately.I'm not able to comment (not enough reputation) so I'll amend Luis Rosety's answer here:
This function works also in cases where n == a or n == b.
Proof: Let n belong to range [a,b], where [a,b] is a subset of real numbers.
Now a <= n <= b. Then n-a >= 0 and n-b <= 0. That means that (n-a)*(n-b) <= 0.
Case b <= n <= a works similarly.
You could do it using
in_array()
combined withrange()
Note As has been pointed out in the comments however, this is not exactly a great solution if you are focussed on performance. Generating an array (escpecially with larger ranges) will slow down the execution.