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

PHP数组按尺寸后缀排序出现Undefined key错误,求解决方法

解决带前缀尺寸标识的数组排序问题

问题核心是你直接将完整的带前缀字符串(如GL001_XXL)作为尺寸映射数组的键,而映射数组的键只有纯尺寸(如XXL),导致找不到对应键报错。只需在比较前提取每个元素里的尺寸部分即可。

修改后的代码

function cmp($a, $b)
{
    $sizes = array(
        "XXS" => 0,
        "XS" => 1,
        "S" => 2,
        "M" => 3,
        "L" => 4,
        "XL" => 5,
        "XXL" => 6,
    );

    // 提取下划线后的尺寸部分
    $aSizePart = explode('_', $a)[1];
    $bSizePart = explode('_', $b)[1];

    $asize = $sizes[$aSizePart];
    $bsize = $sizes[$bSizePart];

    if ($asize == $bsize) {
        return 0;
    }

    return ($asize > $bsize) ? 1 : -1;
}

$your_array = array("GL001_XXL", "GL001_L", "GL001_XXS", "GL001_S");

usort($your_array, "cmp");

// 验证排序结果
print_r($your_array);

额外容错优化

如果数组中存在格式不规范的元素(比如没有下划线),可以添加容错逻辑避免报错,同时将异常元素放到排序末尾:

function cmp($a, $b)
{
    $sizes = array(
        "XXS" => 0,
        "XS" => 1,
        "S" => 2,
        "M" => 3,
        "L" => 4,
        "XL" => 5,
        "XXL" => 6,
    );

    // 提取尺寸部分并做格式校验
    $aParts = explode('_', $a);
    $aSizePart = isset($aParts[1]) ? $aParts[1] : '';
    $bParts = explode('_', $b);
    $bSizePart = isset($bParts[1]) ? $bParts[1] : '';

    // 处理不存在的尺寸,默认设为最大值放到末尾
    $asize = isset($sizes[$aSizePart]) ? $sizes[$aSizePart] : PHP_INT_MAX;
    $bsize = isset($sizes[$bSizePart]) ? $sizes[$bSizePart] : PHP_INT_MAX;

    if ($asize == $bsize) {
        return 0;
    }

    return ($asize > $bsize) ? 1 : -1;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:22:37