Detecting if two number ranges clash
math, php, range
Solution
Well, first make sure you have well-ordered pairs (probably a good idea anyway, depending on what you plan to do with them):
if($a1 > $a2) {
// swap $a1 and $a2
$temp = $a1;
$a1 = $a2;
$a2 = $temp;
}
if($b1 > $b2) {
// swap $b1 and $b2
$temp = $b1;
$b1 = $b2;
$b2 = $temp;
}
Then you should be able to simplify to:
$clash = ($a2 <= $b1) || ($a1 >= $b2);
Edit: Whoops, got that test backwards! Try:
$clash = !(($a2 <= $b1) || ($a1 >= $b2));
Problem
This is hopefully a very simple maths question. If I have two number ranges, what is the simplest and most efficient way to check if they clash, eg: ``` 10-20 and 11-14 // clash as B is contained in A 11-15 and 20-22 // don't clash 24-26 and 20-30 // clash as A is contained in B 15-25 and 20-30 // clash as they overlap at each end ``` I currently have this mess, but there must be a much simpler way to do this check: ``` $clash = ($b1 >= $a1 && $b1 <= $a2) || ($b2 >= $a1 && $b2 <= $a2) || ($a1 >= $b1 && $a1 <= $b2) || ($a2 >= $b1 && $a2 <= $b2); ```