现有数据结构
[
{
"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"
},
]
2 回答
守着一只汪
TA贡献1872条经验 获得超3个赞
<?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'];
}
肥皂起泡泡
TA贡献1829条经验 获得超6个赞
看了你的问题,先指出一个问题,键相同会导致数据覆盖,所以你的理想数据结构有一定问题。
问题主要想解决,按日期归类,记录每天的最大值和最小值
我的方案比较笨,一次循环搞定,假设数据格式都如上那么规整
// 查询结果,如问题内的结构
$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码大小
- 2 回答
- 0 关注
- 613 浏览
添加回答
举报
0/150
提交
取消