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

如何按3位月份缩写对PHP多维数组的data子数组进行排序

问题根因

你的代码仅单独抽取了data数组中的月份字段排序,没有对原数组的data结构做任何修改,排序结果没有回写到原数组,所以不会生效。正确做法是直接对每个子项的data数组本身执行排序,基于元素的x(月份缩写)对应的顺序值排序即可。

正确实现代码

// 提前定义月份顺序权重,避免排序时重复生成提升效率
$monthWeight = [
    'Jan' => 1, 'Feb' => 2, 'Mar' => 3, 'Apr' => 4, 'May' => 5, 'Jun' => 6,
    'Jul' => 7, 'Aug' => 8, 'Sep' => 9, 'Oct' => 10, 'Nov' => 11, 'Dec' => 12
];

// 遍历数组时加&引用,才能修改原数组的元素
foreach ($shipping_chart_month as &$chartItem) {
    usort($chartItem['data'], function ($itemA, $itemB) use ($monthWeight) {
        // 直接对比两个元素月份对应的权重值即可
        return $monthWeight[$itemA['x']] - $monthWeight[$itemB['x']];
    });
}
// 释放引用变量,避免后续逻辑误修改原数组
unset($chartItem);

如果你的运行环境是PHP 7及以上版本,也可以用太空船运算符简化排序逻辑的返回值:

return $monthWeight[$itemA['x']] <=> $monthWeight[$itemB['x']];

执行完成后,每个data数组就会按照1月到11月的顺序自动排序完成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:15:00