php合并时间段
<?php
$list = array(
array('begin_time' => 11, 'end_time' => 12),
array('begin_time' => 1, 'end_time' => 4),
array('begin_time' => 2, 'end_time' => 3),
array('begin_time' => 2, 'end_time' => 7),
array('begin_time' => 9, 'end_time' => 12),
array('begin_time' => 11, 'end_time' => 13),
array('begin_time' => 11, 'end_time' => 18),
);
$list = concatTimeRage($list);
echo '
';print_r($list);
/**
* 为二维数组排序
* @param array $list 二维数组数据
* @param string $firstField 排序的字段1
* @param int $firstFieldSort 字段1的排序规则
* @param string $secondField 排序的字段2
* @param int $secondFieldSort 字段2的排序规则
* @return array
*/
function arrayMultiSort($list, $firstField, $firstFieldSort = SORT_DESC, $secondField = null, $secondFieldSort = SORT_DESC)
{
if (!is_array($list) || !$list) {
return $list;
}
$firstFieldValueList = array_column($list, $firstField);
if (!$firstFieldValueList) {
return $list;
}
if ($firstField) {
if ($secondField) {
$secondFieldValueList = array_column($list, $secondField);
array_multisort($firstFieldValueList, $firstFieldSort, $secondFieldValueList, $secondFieldSort, $list);
}
else {
array_multisort($firstFieldValueList, $firstFieldSort, $list);
}
}
return $list;
}
/**
* 合并多个时间段
* @param array $list
* @param bool $sort 是否预先排序二维数组
* @param string $beginTimeField 开始时间的字段名称
* @param string $endTimeField 结束时间的字段名称
* @return array
*/
function concatTimeRage($list, $sort = true, $beginTimeField = 'begin_time', $endTimeField = 'end_time')
{
if (!is_array($list) || !$list) {
return $list;
}
$list = $sort ? arrayMultiSort($list, $beginTimeField, SORT_ASC, $endTimeField, SORT_ASC) : $list;
foreach ($list as $key => $curNode) {
if (!$key) {
continue;
}
if (!isset($list[$key - 1])) {
return concatTimeRage(array_values($list));
}
$preNode = $list[$key - 1];
if ($curNode[$beginTimeField] < $preNode[$endTimeField]) {
if ($curNode[$endTimeField] > $preNode[$endTimeField]) {
$list[$key - 1][$endTimeField] = $curNode[$endTimeField];
}
unset($list[$key]);
}
}
return $list;
}本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭