希望这是一个非常简单的数学问题.如果我有两个数字范围,检查它们是否发生冲突的最简单,最有效的方法是什么,例如:
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
Run Code Online (Sandbox Code Playgroud)
我目前有这个烂摊子,但必须有一个更简单的方法来做这个检查:
$clash = ($b1 >= $a1 && $b1 <= $a2)
|| ($b2 >= $a1 && $b2 <= $a2)
|| ($a1 >= $b1 && $a1 <= $b2)
|| ($a2 >= $b1 && $a2 <= $b2);
Run Code Online (Sandbox Code Playgroud)
Dan*_*den 11
好吧,首先要确保你有完好的配对(无论如何,这可能是一个好主意,取决于你打算用它们做什么):
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;
}
Run Code Online (Sandbox Code Playgroud)
然后你应该能够简化为:
$clash = ($a2 <= $b1) || ($a1 >= $b2);
Run Code Online (Sandbox Code Playgroud)
编辑:哎呀,倒退了!尝试:
$clash = !(($a2 <= $b1) || ($a1 >= $b2));
Run Code Online (Sandbox Code Playgroud)
小智 9
我认为它应该像这样简单:
clash = A_LOW <= B_HIGH AND A_HIGH >= B_LOW
Run Code Online (Sandbox Code Playgroud)