发布于2026-07-05 阅读(0)
扫一扫,手机访问
本文介绍如何根据指定的最近7个月时间序列,自动向患者发药记录的 dispatch 数组中插入缺失月份的占位对象(quantity: 0),并按时间升序排序,确保数据完整且时序正确。
在医疗或药品分发系统里,一个很常见的场景是:需要按连续的时间维度(比如最近7个月)展示每个患者的用药量统计。但原始数据里的 dispatch 数组往往只记录了实际有发货的月份,中间空档直接跳过了。这会导致图表渲染出来断断续续,聚合计算也容易出错。下面要聊的,就是一个健壮又可直接复用的 PHP 解决方案——核心就三步:自动识别缺失月份 → 插入标准化占位项 → 按 period 升序重排。
// 假设 $data 是原始响应 JSON 解码后的对象(含 records 数组)
// $monthsData 是包含最近7个月信息的 JSON 解码对象(含 months 数组)
foreach ($monthsData->months as $targetMonth) {
foreach ($data->records as $record) {
// 检查当前 record.dispatch 是否已存在该 period
$exists = array_filter($record->dispatch, function($item) use ($targetMonth) {
return $item->period === $targetMonth->period;
});
if (empty($exists)) {
// 解析 period 获取 month 数字(如 "2022-5" → 5)
$parsedDate = DateTime::createFromFormat('Y-m', $targetMonth->period);
$monthNum = $parsedDate ? (int)$parsedDate->format('m') : (int)explode('-', $targetMonth->period)[1];
// 构造新 dispatch 项
$newDispatchItem = (object)[
'month' => $monthNum,
'year' => $targetMonth->year,
'quantity'=> 0,
'period' => $targetMonth->period
];
$record->dispatch[] = $newDispatchItem;
// 按 period 升序重排(关键!保证时间连续性)
usort($record->dispatch, function($a, $b) {
return strcmp($a->period, $b->period);
});
}
}
}
通过这个方案,每个患者的 dispatch 数组都能精准地包含目标时间段内的所有月份,缺失的月以 quantity: 0 显式补全。前端做可视化、同比环比分析、导出报表——底层数据基础扎实了,后面的事情就顺了。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8