php数组内部上下合并 以及去重复,哪位有更好更快的办法?

现有数据结构

[
    {
        "checktime": "2017-06-01 10:47:46"
    },
    {
        "checktime": "2017-06-01 20:57:17"
    },
    {
        "checktime": "2017-06-02 15:15:45"
    },
    {
        "checktime": "2017-06-02 22:33:11"
    },
    {
        "checktime": "2017-06-02 22:43:54"
    },
    {
        "checktime": "2017-06-03 07:37:42"
    },
    {
        "checktime": "2017-06-03 20:02:47"
    },
    {
        "checktime": "2017-06-04 07:43:40"
    },
    {
        "checktime": "2017-06-06 07:44:25"
    },
    {
        "checktime": "2017-06-06 23:51:53"
    }
]

理想数据结构

[
    {
        "start": "2017-06-01 10:47:46",
         "end": "2017-06-01 20:57:17"
    },
    
    {
        "start": "2017-06-02 15:15:45",
         "end": "2017-06-02 22:43:54"
    },
    {
        "start": "2017-06-03 07:37:42",
        "end": "2017-06-03 20:02:47"
    },
    {
        "start": "2017-06-04 07:43:40"
    },
    {
        "start": "2017-06-06 07:44:25",
        "end": "2017-06-06 23:51:53"
    },
   
]
慕标5832272
浏览 614回答 2
2回答

守着一只汪

<?php $output = []; $i = -1; $last = ''; $start = true; foreach ($input as $key => $val) { list ($current) = explode(' ', $val['checktime']); if ($current != $last) { $i ++; $last = $current; $start = true; } else { $start = false; } $output[$i][$start ? 'start' : 'end'] = $val['checktime']; }

肥皂起泡泡

看了你的问题,先指出一个问题,键相同会导致数据覆盖,所以你的理想数据结构有一定问题。 问题主要想解决,按日期归类,记录每天的最大值和最小值 我的方案比较笨,一次循环搞定,假设数据格式都如上那么规整 // 查询结果,如问题内的结构 $list = []; // 定义变量 $data = []; // 进行数据循环 foreach ($list as $value) { // 转换为时间戳 $tempTime = strtotime($value['checktime']); // 获取日期 $key = date('Ymd', $tempTime); // 按日期开辟数据键 isset($data[$key]) || $data[$key] = ['min' => '', 'max' => '']; // 判断最小数是否为空,为空则直接赋值 if (empty($data[$key]['min'])) { $data[$key]['min'] = $value['checktime']; } else { $value['checktime'] < $data[$key]['min'] && $data[$key]['min'] = $value['checktime']; } // 判断最大数是否为空,为空则直接赋值 if (empty($data[$key]['max'])) { $data[$key]['max'] = $value['checktime']; } else { $value['checktime'] > $data[$key]['max'] && $data[$key]['max'] = $value['checktime']; } } // 此时的data可能就是你想要的了 注:字符串也可比大小,按字符从左到右逐一比较,比较ASCII码大小
打开App,查看更多内容
随时随地看视频慕课网APP