加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读