PHP - 自定义尺寸排序顺序

问题描述 投票:0回答:1

我正在尝试按大小对数组值进行排序,但遇到问题。 我的数组提取的值与用于排序的“cmp”函数的值不同。 代码是这样的:

function cmp($a, $b)
{

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

    $asize = $sizes[$a];
    $bsize = $sizes[$b];

    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");

当我尝试打印这个值时,它告诉我“未定义的键”。 如何对数组进行排序而不出现错误?

php size usort
1个回答
0
投票

正如评论中所述,如果您的模式确实是

xxx_size
,您可以在
_
上爆炸并抓住第二个项目。

只要您有“返回 0、1 或 -1”模式,也可以使用

<=>

function sort_array_item_by_size($a, $b): int
{
    static $sizes = [
        "XXS" => 0,
        "XS" => 1,
        "S" => 2,
        "M" => 3,
        "L" => 4,
        "XL" => 5,
        "XXL" => 6,
    ];

    // The next three lines really should include some error checking
    $size_a = explode("_", $a)[1];
    $size_b = explode("_", $b)[1];

    return $sizes[$size_a] <=> $sizes[$size_b];
}

$your_array = ["GL001_XXL", "GL001_L", "GL001_XXS", "GL001_S"];

usort($your_array, "sort_array_item_by_size");

print_r($your_array);

// Array
// (
//     [0] => GL001_XXS
//     [1] => GL001_S
//     [2] => GL001_L
//     [3] => GL001_XXL
// )
© www.soinside.com 2019 - 2024. All rights reserved.