<?php
$main_range = range(7,18);
$lunch = [range(9,12),range(14,15)];
function cutArrayByArrays($range, $exclude, $returnAsRange = false) {
foreach ($exclude as $rx) {
$start = $range[0];
$end = $range[count($range)-1];
$exist = array_intersect($rx, $range);
if (count($exist) > 1 && $start != $exist[0]) {
$result[] = range($start, $exist[0]);
$range = range($exist[count($exist)-1], $end);
}
}
if ($exist[count($exist)-1] != $end) $result[] = $range;
return $returnAsRange ? array_map(function($elem){
return [$elem[0], $elem[count($elem)-1]];
}, $result) : $result;
};
var_dump(cutArrayByArrays($main_range, $lunch, true));