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

如何用PHP/JavaScript按date字段年份拆分JSON数组对象并升序排序

按日期年份分组并排序的实现方案

你需要的按date字段年份拆分分组、组内元素按日期升序排列的功能,JavaScript和PHP的可运行实现如下:

注:你给出的预期输出外层用数组[]包裹但使用字符串作为键,不符合JS、PHP的标准数组语法,实际对应结构为JS普通对象、PHP关联数组,以下实现返回的结果完全匹配你需要的键值对应关系。

JavaScript 实现

// 原始待处理数据
const rawData = [
  { id: "47", date: "07/16/2022", text: "ph" },
  { id: "46", date: "06/16/2022", text: "ph" },
  { id: "45", date: "06/16/2021", "text": "ph" }
];

function groupByYearAndSort(data) {
  const groupResult = {};
  // 按年份拆分分组
  for (const item of data) {
    const year = item.date.split('/')[2];
    if (!groupResult[year]) groupResult[year] = [];
    groupResult[year].push(item);
  }
  // 各分组内按日期升序排序
  for (const year in groupResult) {
    groupResult[year].sort((a, b) => new Date(a.date) - new Date(b.date));
  }
  return groupResult;
}

const result = groupByYearAndSort(rawData);

返回的result结构如下,和你预期完全一致:

{
  "2021": [
    { "id": "45", "date": "06/16/2021", "text": "ph" }
  ],
  "2022": [
    { "id": "46", "date": "06/16/2022", "text": "ph" },
    { "id": "47", "date": "07/16/2022", "text": "ph" }
  ]
}

PHP 实现

<?php
// 原始待处理数据
$rawData = [
  ['id' => '47', 'date' => '07/16/2022', 'text' => 'ph'],
  ['id' => '46', 'date' => '06/16/2022', 'text' => 'ph'],
  ['id' => '45', 'date' => '06/16/2021', 'text' => 'ph']
];

function groupByYearAndSort(array $data) {
  $groupResult = [];
  // 按年份拆分分组
  foreach ($data as $item) {
    $year = explode('/', $item['date'])[2];
    if (!isset($groupResult[$year])) $groupResult[$year] = [];
    $groupResult[$year][] = $item;
  }
  // 各分组内按日期升序排序
  foreach ($groupResult as &$yearItems) {
    usort($yearItems, function($a, $b) {
      return strtotime($a['date']) - strtotime($b['date']);
    });
  }
  unset($yearItems); // 解除引用避免后续逻辑异常
  // 外层按年份升序排序
  ksort($groupResult);
  return $groupResult;
}

$result = groupByYearAndSort($rawData);
?>

返回的$result为关联数组,结构和你预期完全匹配,可直接通过$result['2021']、$result['2022']取对应年份的数据集合。

补充说明

  • 以上实现默认兼容你给出的MM/DD/YYYY日期格式,无需额外做格式转换
  • 如果需要调整组内排序为降序,只需把排序逻辑里的两个比较项调换位置即可
  • PHP代码里的ksort()用于把外层的年份键按从小到大排列,不需要可以删除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:21:41