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 国际许可协议 进行许可。
评论已关闭