Php Array Сортировка размеров одежды (XXS XS SML XL XXL) и чисел в динамическом массиве

У меня есть массив с чем-то вроде этого:

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 ) 

Я имею в виду, что это динамический массив …

Я использую для этого asort (); для сортировки этих значений.

Есть ли функция / способ сделать это?

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

Вы можете использовать еще функцию usort в PHP и предоставить фактическую функцию сравнения. Что-то вроде этого:

 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 eg XXL to 48 } else { // deal with comparing eg XXL to M as you would } } usort($my_array, "cmp"); 

хорошо, вы можете расположить ключи с соответствующим размером, у вас есть S, M, L (-1,1,1), если у вас есть X`s front, просто генерируйте значение, сделайте итоговое значение ключом (возможно, вам следует round ()) и вуаля

EX:

  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', '1XL', '4', '10 .5 ',' 9.5 ',' s ',' XS ',' L ',' m ') в: array ('1', '4', 5 ',' 9.5 ', '10 .5', 'XS', 's', 'L', '1XL')