Php数组排序服装尺寸(XXS XS S M L XL XXL)和数字在一个动态数组


Php Array Sorting Clothing Sizes (XXS XS S M L XL XXL) and Numbers on a Dynamic Array

我有一个这样的数组:

Array ( [0] => XL [1] => M [2] => L [3] => XL [4] => S [5] => XXL)

但我想排序我的数组像:

 S - M - L - XL - XXL

我知道我可以用usort()来做,但是,我得到了一些其他的值,比如数字:

Array ( [0] => 14 [1] => 37 [2] => 38 [3] => 39 [4] => 40 [5] => 44 [6] => 36 [7] => 28 )

我的意思是这是一个动态数组…

我使用的是sort();

有什么功能/方法可以做到这一点吗?

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;
}
usort($your_array, "cmp");

您仍然可以在PHP中使用usort函数并提供实际的比较函数。像这样:

function cmp($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    if(is_numeric($a) && is_numeric($b))
    {
        $a = intval($a);
        $b = intval($b);
        return $a > $b ? 1 : -1;
    }
    elseif(is_numeric($a) || is_numeric($b))
    {
        // somehow deal with comparing e.g. XXL to 48
    }
    else
    {
        // deal with comparing e.g. XXL to M as you would
    }
}
usort($my_array, "cmp");

你可以按照相应的大小排列键,你有S M L(-1,1,1)如果你前面有X就生成一个值,把结果值作为键(也许你应该四舍五入())然后看

,

    S=15
    X=1
    XXS = 15-2*1 =13
    XS= 15-1=14
array([13]=>'XXS',[14]=>'XS');

这很有帮助:https://gist.github.com/adrianbadowski/5c2f287a96d10a115d75f02f12b9e134

排序数组的大小:数组(' 1 ',' 5 ',' 1 xl","4","10.5","9.5","年代","x","L"、"m")为:数组(' 1 ',' 4 ',5"、"9.5"、"10.5"、"x"、"s"、"L"、"1 xl)