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

PHP多维数组按指定月份顺序排序的实现方案

解决方案:按指定月份顺序排序多维数组

这个需求很常见,咱们可以通过构建月份顺序映射 + 自定义排序函数轻松实现,步骤如下:

1. 拆解月份数组,得到完整的有序列表

你的$monthArray里包含逗号分隔的月份组,首先得把它们拆成单个月份的有序数组:

$monthArray = array("Jan 2018,Feb 2018","Mar 2018");
$orderedMonths = [];
foreach ($monthArray as $group) {
    // 把每个逗号分隔的月份组拆成单个元素,合并到有序列表中
    $orderedMonths = array_merge($orderedMonths, explode(',', $group));
}

执行后$orderedMonths就变成了["Jan 2018", "Feb 2018", "Mar 2018"],这正是咱们需要的目标排序顺序。

2. 创建月份-顺序索引的映射

为了快速判断每个月份的排序优先级,我们把有序数组的键值互换,得到一个关联数组:

$monthOrder = array_flip($orderedMonths);

此时$monthOrder的结构为:

[
    "Jan 2018" => 0,
    "Feb 2018" => 1,
    "Mar 2018" => 2
]

每个月份对应的数值就是它的排序位置,数值越小越靠前。

3. 用自定义排序函数对$result排序

使用PHP的usort()函数,结合上面的映射数组定义排序规则:

$result = array(
    array( "day" => "Feb 2018", "value" => "101" ),
    array( "day" => "Jan 2018", "value" => "18" ),
    array( "day" => "Mar 2018", "value" => "0" )
);

usort($result, function($a, $b) use ($monthOrder) {
    // 比较两个元素对应的月份顺序索引,差值决定排序方向
    return $monthOrder[$a['day']] - $monthOrder[$b['day']];
});

最终效果

执行完排序后,$result就会严格按照Jan 2018 → Feb 2018 → Mar 2018的顺序排列:

array(3) {
  [0]=>
  array(2) {
    ["day"]=>
    string(8) "Jan 2018"
    ["value"]=>
    string(2) "18"
  }
  [1]=>
  array(2) {
    ["day"]=>
    string(8) "Feb 2018"
    ["value"]=>
    string(3) "101"
  }
  [2]=>
  array(2) {
    ["day"]=>
    string(8) "Mar 2018"
    ["value"]=>
    string(1) "0"
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:55:30