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';
}
}
}
}
正如你所看到的那样,我将数组分成两部分,但这似乎没有效果。有什么建议吗?
答案 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';
}