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

PHP数组排序:如何按前缀升序、尺寸后缀升序排列分隔元素?

解决PHP数组按前缀+尺寸排序的问题

你的代码目前只按尺寸后缀排序,所以会出现同尺寸的不同前缀元素混排的情况。要实现先按前缀(如GL001、GL002)升序,再按尺寸后缀升序,需要修改排序逻辑,先对比前缀,前缀相同再对比尺寸。

修正后的代码

function cmp($a, $b) {
    $sizes = array(
        "XS" => 0,  
        "S" => 1,
        "M" => 2,
        "L" => 3,
    );

    // 拆分前缀和尺寸,用list更直观
    list($prefix_a, $size_a) = explode("_", $a);
    list($prefix_b, $size_b) = explode("_", $b);

    // 先比较前缀,前缀不同直接返回结果
    $prefixCompare = $prefix_a <=> $prefix_b;
    if ($prefixCompare !== 0) {
        return $prefixCompare;
    }
    // 前缀相同的情况下,再比较尺寸
    return $sizes[$size_a] <=> $sizes[$size_b];
}
    
$array = array("GL001_M","GL001_XS","GL001_S",                  
                "GL001_L","GL002_M","GL002_XS",
                "GL002_S","GL002_L");

usort($array,"cmp");

foreach($array as $arrayItem){
    echo $arrayItem.' | ';
}

运行结果

GL001_XS | GL001_S | GL001_M | GL001_L | GL002_XS | GL002_S | GL002_M | GL002_L |

逻辑说明

  1. 用list()拆分元素的前缀和尺寸,比直接取数组下标更清晰易读
  2. 优先对比前缀的字符串顺序:$prefix_a <=> $prefix_b会返回-1、0或1,对应前缀的大小关系
  3. 只有当前缀完全相同时,才会进入尺寸的比较逻辑,这样就能保证同一前缀的元素按尺寸排序,不同前缀的元素按前缀分组排序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:38:33