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

时间:2015-02-16 17:59:24

标签: php arrays multidimensional-array

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';
      }
    }
  }
}

正如你所看到的那样,我将数组分成两部分,但这似乎没有效果。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我会为两个年龄组创建一个数组范围,并查看是否有任何相似之处(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';
}