当前位置:网站首页 > 服务器 > 正文

php合并时间段

adminadmin 2019-05-28 186 0

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


标签:php合并时间

  • 流泪

    0

  • 打酱油

    0

  • 开心

    0

  • 鼓掌

    0

  • 恐怖

    0

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

请填写验证码
搜索
最近发表
标签列表
最新留言
    • 订阅本站的 RSS 2.0 新闻聚合