Serio...? Wystarczy wpisać w google to, co Ci wyżej podświetliłem.
Given two ranges [x1,x2], [y1,y2]
def is_overlapping(x1,x2,y1,y2):
return max(x1,y1) <= min(x2,y2)
źródło
Implementacja w PHP:
<?php
class Range
{
private $start;
private $end;
public function __construct($start, $end)
{
if (gettype($start) !== gettype($end)) {
throw new \InvalidArgumentException("Range's start and range's end must be of the same type");
}
if ($start > $end) {
throw new \InvalidArgumentException("Range's start must be smaller than range's end");
}
$this->start = $start;
$this->end = $end;
}
public function overlap(Range $range): bool
{
return max($this->start, $range->start) <= min($this->end, $range->end);
}
/**
* @param Range[] $ranges
* @return bool
*/
public function overlapAny($ranges): bool
{
foreach ($ranges as $range) {
if($this->overlap($range)) {
return true;
}
}
return false;
}
}
$ranges = [
new Range(11, 20),
new Range(21, 25),
new Range(41, 48)
];
var_dump((new Range(20, 49))->overlapAny($ranges) === true);
var_dump((new Range(22, 49))->overlapAny($ranges) === true);
var_dump((new Range(26, 30))->overlapAny($ranges) === false);
var_dump((new Range(26, 40))->overlapAny($ranges) === false);
var_dump((new Range(-1, 10))->overlapAny($ranges) === false);
var_dump((new Range(49, 50))->overlapAny($ranges) === false);