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

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

Posted by: admin July 12, 2020 Leave a comment

Questions:

I’ve a array with something like that:

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

But i want to sort my array like:

 S - M - L - XL - XXL

I know that i can do it with usort() but, i’ve get some other values like numbers:

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

I mean this is a dynamic array…

I’m using for that asort(); for sorting that values.

Is there any function/way to do that?

How to&Answers:
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");

Answer:

You can use still use usort function in PHP and supply the actual comparison function. Something like this:

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

Answer:

well you can arrange the keys with the corresponding size, you have S,M,L (-1,1,1) if you have X`s in front just generate a value, make the resulting value the key (maybe you ought to round() ) and voila

EX:

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

Answer:

This can be helpful:
https://gist.github.com/adrianbadowski/5c2f287a96d10a115d75f02f12b9e134

Sort array of sizes: array(‘1’, ‘5’, ‘1XL’, ‘4’, ‘10.5’, ‘9.5’, ‘s’, ‘XS’, ‘L’, ‘m’)
into: array(‘1’, ‘4’, 5′, ‘9.5’, ‘10.5’, ‘XS’, ‘s’, ‘L’, ‘1XL’)