如何按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
相关产品推荐
相关产品推荐

