You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP中对多维对象数组动态排序并去重关联日期?

PHP数组去重分组并关联日期排序解决方案

需求说明

需要将给定的PHP数组按name去重,每个名称关联对应的日期和visit_total数据,并支持动态排序。期望输出结构类似:

{
  "Player": [
    {"date": "2021/04/29", "visit_total": 3},
    {"date": "2022/01/20", "visit_total": 4},
    {"date": "2022/07/29", "visit_total": 1}
  ],
  "Player2": [
    {"date": "2022/03/26", "visit_total": 1},
    {"date": "2022/06/08", "visit_total": 1}
  ],
  "Player3": [
    {"date": "2022/09/05", "visit_total": 1}
  ]
}

实现代码

<?php
// 原数组(示例数据)
$originalArray = [
    (object)[
        "name" => "Player",
        "role_id" => 1,
        "date" => "2021/04/29",
        "visit_1" => "0",
        "visit_total" => "3",
        "weekly_history" => '[{"week": "2021/04/29", "visit_1": 0, "visit_total": 1}, {"week": "2021/04/29", "visit_1": 0, "visit_total": 1}, {"week": "2021/04/29", "visit_1": 0, "visit_total": 1}]'
    ],
    (object)[
        "name" => "Player2",
        "role_id" => 1,
        "date" => "2022/03/26",
        "visit_1" => "0",
        "visit_total" => "1",
        "weekly_history" => '[{"week": "2022/03/26", "visit_1": 0, "visit_total": 1}]'
    ],
    (object)[
        "name" => "Player",
        "role_id" => 3,
        "date" => "2022/01/20",
        "visit_1" => "0",
        "visit_total" => "4",
        "weekly_history" => '[{"week": "2022/01/20", "visit_1": 0, "visit_total": 1}, {"week": "2022/01/20", "visit_1": 0, "visit_total": 1}, {"week": "2022/01/20", "visit_1": 0, "visit_total": 1}, {"week": "2022/01/20", "visit_1": 0, "visit_total": 1}]'
    ],
    (object)[
        "name" => "Player2",
        "role_id" => 2,
        "date" => "2022/06/08",
        "visit_1" => "0",
        "visit_total" => "1",
        "weekly_history" => '[{"week": "2022/06/08", "visit_1": 0, "visit_total": 1}]'
    ],
    (object)[
        "name" => "Player",
        "role_id" => 2,
        "date" => "2022/07/29",
        "visit_1" => "0",
        "visit_total" => "1",
        "weekly_history" => '[{"week": "2022/07/29", "visit_1": 0, "visit_total": 1}]'
    ],
    (object)[
        "name" => "Player3",
        "role_id" => 2,
        "date" => "2022/09/05",
        "visit_1" => "0",
        "visit_total" => "1",
        "weekly_history" => '[{"week": "2022/09/05", "visit_1": 0, "visit_total": 1}]'
    ]
];

// 1. 按name分组,收集日期和visit_total
$groupedData = [];
foreach ($originalArray as $item) {
    $name = $item->name;
    // 转换visit_total为整数
    $visitTotal = (int)$item->visit_total;
    // 向对应name的数组添加数据
    $groupedData[$name][] = [
        'date' => $item->date,
        'visit_total' => $visitTotal
    ];
}

// 2. 对每组内的日期进行动态排序(按日期升序,可修改排序逻辑)
foreach ($groupedData as &$items) {
    usort($items, function($a, $b) {
        // 转换为时间戳比较
        $dateA = strtotime($a['date']);
        $dateB = strtotime($b['date']);
        return $dateA - $dateB; // 升序,倒序则$dateB - $dateA
    });
}
unset($items); // 解除引用

// 输出结果(可转为JSON格式)
echo json_encode($groupedData, JSON_PRETTY_PRINT);
?>

代码说明

  • 分组去重:遍历原数组,以name作为键,自动实现名称去重,同时收集对应条目的date和visit_total数据。
  • 动态排序:通过usort结合时间戳比较,可灵活调整每组内日期的排序规则(升序/降序)。
  • 类型校正:将字符串类型的visit_total转为整数,保证数据类型统一。

输出结果

运行代码后,会输出格式化后的JSON结构,完全匹配需求示例的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:26:00