php排序数组使用几个月的键忽略其他键
发布时间:2020-12-13 21:33:46 所属栏目:PHP教程 来源:网络整理
导读:Array( [strMachineGroupID] = MC000027 [strMachineGroup] = 1 [April-201904_QTY] = 1 [February-201902_QTY] = 1 [January-201901_QTY] = 1 [July-201907_QTY] = 1 [June-201906_QTY] = 1 [March-201903_QTY] = 1 [May-201905_QTY] = 1 [strMachineGroupI
Array ( [strMachineGroupID] => MC000027 [strMachineGroup] => 1 [April-201904_QTY] => 1 [February-201902_QTY] => 1 [January-201901_QTY] => 1 [July-201907_QTY] => 1 [June-201906_QTY] => 1 [March-201903_QTY] => 1 [May-201905_QTY] => 1 [strMachineGroupIDUE] => MC000027 [April-201904_UE] => 1.00 [February-201902_UE] => 1.00 [January-201901_UE] => 1.00 [July-201907_UE] => 1.00 [June-201906_UE] => 1.00 [March-201903_UE] => 1.00 [May-201905_UE] => 1.00 ) 这是我的查询结果中的数组.我想对这个数组进行排序,以便结果将按月顺序显示索引(从1月到12月). 我希望那个1月和其他几个月一样. 我试过用: // $value = (array)$value; // print_r($value); // print_r(asort($value)); // print_r(krsort($value)); // print_r(ksort($value)); 但他们确实有效.我还在努力做这个. 任何这样做的想法都会有所帮助. 解决方法
您需要使用
uksort 来比较密钥.此回调函数将按键的日期排序到开头(依赖于这些键中包含6位YYYYMM字符串的事实),然后在日期之间进行排序.非日期键按字母顺序排序.
uksort($array,function ($k1,$k2) { if (preg_match('/^w+-(d{6})_w+$/',$k1,$m1)) { if (preg_match('/^w+-(d{6})_w+$/',$k2,$m2)) { // both have dates,sort on that return strcmp($m1[1],$m2[1]); } else { // dates sort first return -1; } } elseif (preg_match('/^w+-(d{6})_w+$/',$m2)) { // dates sort first return 1; } else { // neither is a date,sort alphabetically return strcmp($k1,$k2); } }); 输出: Array ( [January-201901_UE] => 1 [January-201901_QTY] => 1 [February-201902_QTY] => 1 [February-201902_UE] => 1 [March-201903_UE] => 1 [March-201903_QTY] => 1 [April-201904_UE] => 1 [April-201904_QTY] => 1 [May-201905_UE] => 1 [May-201905_QTY] => 1 [June-201906_QTY] => 1 [June-201906_UE] => 1 [July-201907_UE] => 1 [July-201907_QTY] => 1 [strMachineGroup] => 1 [strMachineGroupID] => MC000027 [strMachineGroupIDUE] => MC000027 ) Demo on 3v4l.org (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |