Skip to content

Instantly share code, notes, and snippets.

@adrianbadowski
Created May 8, 2017 10:40
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save adrianbadowski/5c2f287a96d10a115d75f02f12b9e134 to your computer and use it in GitHub Desktop.
Save adrianbadowski/5c2f287a96d10a115d75f02f12b9e134 to your computer and use it in GitHub Desktop.
/**
* @param mixed $a
* @param mixed $b
*
* @return int
*/
protected function _sortSizes($a, $b)
{
$aUpper = strtoupper($a);
$bUpper = strtoupper($b);
$sizes = array(
'XXXS',
'XXXS/XXS',
'XXS/XXXS',
'XXS',
'XXS/XS',
'XS/XXS',
'XS',
'XS/S',
'S/SX',
'S',
'S/M',
'M/S',
'M',
'M/L',
'L/M',
'L',
'XL/L',
'L/XL',
'XL',
'XL/XXL',
'XXL/XL',
'XXL',
'XXXL/XXL',
'XXL/XXXL',
'XXXL',
);
$asize = 100;
$apos = -1;
$bsize = 100;
$bpos = -1;
foreach ($sizes as $val => $str) {
$pos = ($aUpper == $str) ? 1 : -1;
if ($pos > 0 && ($apos < 0 || $pos < $apos)) {
$asize = $val;
$apos = $pos;
}
$pos = ($bUpper == $str) ? 1 : -1;
if ($pos > 0 && ($bpos < 0 || $pos < $bpos)) {
$bsize = $val;
$bpos = $pos;
}
}
if ($apos < 0) {
if (is_numeric($a) && is_numeric($b)) {
return ($a == $b) ? 0 : ($a > $b) ? 1 : -1;
} else {
return (is_numeric($a)) ? -1 : 1;
}
}
if ($bpos < 0) {
if (is_numeric($a) && is_numeric($b)) {
return ($a == $b) ? 0 : ($a > $b) ? 1 : -1;
} else {
return (is_numeric($b)) ? 1 : -1;
}
}
return ($asize == $bsize ? 0 : ($asize > $bsize ? 1 : -1));
}
/**
* @param array $array
*
* @return array
*/
public function sortSizes(array $array)
{
usort(
$array,
array(
$this,
'_sortSizes',
)
);
return $array;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment