You need to enable JavaScript to run this app. PHP实现多数组按日期合并并生成带类型标记的自定义数组
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现多数组按日期合并并生成带类型标记的自定义数组

多业务源数组按日期整合实现方案

核心实现逻辑

  • 建立「源数据数组-对应来源类型标记」的映射关系,避免对3个独立数组重复编写遍历逻辑
  • 逐次遍历每个源数组的所有记录,给每条记录动态追加对应的type字段标记
  • 对全量收集的记录按date字段升序排序,实现同日期条目相邻归拢的效果
  • 若需要自定义同日期下不同来源条目的排列顺序,可在排序回调中增加类型权重判断

可直接运行的处理代码

注意:你提供的预期结构中存在一处笔误:打款数据的原字段为amount,示例预期里误写为od_amount,实现过程中会保留原数据的字段名,不会随意重命名字段导致数据错位。

基础实现代码:

// 源数据与对应类型的映射配置
$sourceMap = [
    'transactions' => $transactions,
    'overdrafts' => $overdrafts,
    'payout' => $payouts
];

$merged_arr = [];
// 遍历所有源数据
foreach ($sourceMap as $typeName => $dataList) {
    foreach ($dataList as $record) {
        // 追加来源类型标记,不修改原数组结构
        $record['type'] = $typeName;
        $merged_arr[] = $record;
    }
}

// 按日期升序排序,实现同日期条目归拢
usort($merged_arr, function($a, $b) {
    return strtotime($a['date']) <=> strtotime($b['date']);
});

如果需要自定义同日期下的条目排序规则(比如同日期下交易类记录排在最前,其次是透支类,最后是打款类),可以替换排序逻辑为:

usort($merged_arr, function($a, $b) {
    // 先按日期排序
    $dateSort = strtotime($a['date']) <=> strtotime($b['date']);
    if ($dateSort !== 0) {
        return $dateSort;
    }
    // 同日期下按类型权重排序
    $typePriority = [
        'transactions' => 1,
        'overdrafts' => 2,
        'payout' => 3
    ];
    return $typePriority[$a['type']] <=> $typePriority[$b['type']];
});

常见踩坑说明

  • 不要使用按日期建键的聚合方式:本次需求要求每条记录独立保留、携带来源标记,而非将同日期的不同业务字段合并为单条结构
  • 不要省略排序步骤:默认收集的临时数组会按照「交易全量条目→透支全量条目→打款全量条目」的源数组顺序排列,无法实现同日期归拢的效果
  • 遍历追加字段时不要直接引用原数组:避免修改原业务数据的结构,防止影响其他业务逻辑的调用

内容的提问来源于stack exchange,提问作者Wells

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 21:06:04