If sizes are all defined, then you can have a $baseArr containing all valid sizes and sort the current arr based on that
function sortSizeArr($arr) {
$baseArr = array('S', 'M', 'L', 'XL', 'XXL', '3XL', '36', '37', '38', '39', '40', '41');
$sortedArr = array();
for($i = 0; $i < count($baseArr); $i++) {
if(in_array($baseArr[$i], $arr))
array_push($sortedArr, $baseArr[$i]);
}
return $sortedArr;
}
Test:
$sizes = array('M', '38', 'S', '36', '41', '40', 'XXL');
print_r(sortSizeArr($sizes));
Array ( [0] => S [1] => M [2] => XXL [3] => 36 [4] => 38 [5] => 40 [6]
=> 41 )
EDITED by Legionar:
I am calling this function, only if there are alpha-sizes, without numerical-sizes. Some sizes are f.e. M/5, L/6, XL/7, XXL/8, so I changed little bit your function. This helped me, thanks:
function sortSizeArr($arr) {
$baseArr = array('XXS', 'XS', 'S', 'M', 'L', 'XL', 'XXL', 'XXXL', '3XL');
$sortedArr = array();
for ($i = 0; $i < count($baseArr); $i++) {
/*if (in_array($baseArr[$i], $arr)) {
array_push($sortedArr, $baseArr[$i]);
}*/
foreach ($arr as $val) {
$check = reset(explode('/', $val));
if (strpos($val, $baseArr[$i]) === 0) {
array_push($sortedArr, $val);
}
}
}
return $sortedArr;
}
array([s] => 36)