假设你的数据是这样的:
$classes = array(
array(
'name' => 'A',
'day' => 'Monday',
'start'=> '08:00AM',
'end' => '11:00AM',
),
array(
'name' => 'B',
'day' => 'Monday',
'start'=> '10:00AM',
'end' => '11:30AM',
),
array(
'name' => 'C',
'day' => 'Monday',
'start'=> '12:00PM',
'end' => '04:00PM',
),
array(
'name' => 'D',
'day' => 'Monday',
'start'=> '03:00PM',
'end' => '06:00PM',
),
);
你只需要一个嵌套的foreach
,像这样:
$overlap = array();
foreach ($classes as $class1) {
foreach ($classes as $class2) {
if ($class1['day'] != $class2['day'] || $class1 == $class2) continue;
if (strtotime($class1['start']) < strtotime($class2['end']) &&
strtotime($class1['start']) >= strtotime($class2['start']))
{
$array = array($class1['name'], $class2['name']);
sort($array);
if (!in_array($array, $overlap)) $overlap[] = $array;
}
}
}
基本上,它将每个类与所有类进行比较。如果$class1
开始时间小于$class2
结束时间并且 $class1
开始时间大于$class2
开始时间:它们重叠。请记住,每个类将被相互比较两次(例如:A 到 B,B 到 A),所以如果它在第一次不匹配,它会在第二次。
这会给你:
Array
(
[0] => Array
(
[0] => B
[1] => A
)
[1] => Array
(
[0] => D
[1] => C
)
)
如果您要将班级更改D
为:
array(
'name' => 'D',
'day' => 'Monday',
'start'=> '10:00AM',
'end' => '03:00PM',
),
...有效地重叠所有类,你会得到:
Array
(
[0] => Array
(
[0] => A
[1] => B
)
[1] => Array
(
[0] => B
[1] => D
)
[2] => Array
(
[0] => C
[1] => D
)
[3] => Array
(
[0] => A
[1] => D
)
)