检查多维数组中的年龄组是否冲突

Check if age groups in multidimensional array conflict

array (age) {
    [0] -> 
        [0] =>12
        [1] => -
        [2] =>16
    [1] -> 
        [0] =>14
        [1] => -
        [2] =>18
}

我有一个包含年龄组的动态多维数组。如果这些年龄组相互重叠,我想检查一下。在上面的示例中:年龄组 12-16 将与 14-18 重叠,在这种情况下我想抛出一个错误。

如果我试过嵌套 foreach 和 for 循环,但我似乎能做对。

这是我尝试过的:

foreach ($group as $k => $g) {
  $g1[] = $g[0];
  $g2[] = $g[2];
}

foreach ($g1 as $k => $g) {
  if ($g < $g2[$k]) {
    foreach ($g2 as $l => $gg) {
      if ($gg < $g[$l]) {
        echo 'overlap';
      }
    }
  }
}

如你所见,我已经将数组分成两部分,但这似乎并不有效。有什么建议吗?

我会为两个年龄组创建一个数组范围并查看是否有任何相似之处 (array_intersect())。

$age_range1 = range($array[0][0], $array[0][2]);
$age_range2 = range($array[1][0], $array[1][2]);
$intersect = array_intersect($age_range1, $age_range2);
if(count($intersect) > 0) {
    //throw exception
}

如果年龄段数组是动态的(大于2),当然需要动态生成数组范围,通过两次循环比较

$array = array(0 => array(0 => 12, 2 => 18), 1 => array(0 => 19, 2 => 20), 2 => array(0 => 19, 2 => 35));

$similarities = false;
for($k = 0; $k < count($array); $k++) {
    $master = range($array[$k][0], $array[$k][2]);

    for($i = 1; $i < count($array); $i++) {
        $age_range = range($array[$i][0], $array[$i][2]);
        $intersect = array_intersect($master, $age_range);
        if(count($intersect) > 0) {
            $similarities = true;
            break;
        }
    }
}

if($similarities == true) {
    echo 'found exception'; //throw exception
} else {
    echo 'found nothing';
}