<?php
$array = [
"GL001_M",
"GL001_XL",
"GL001_S",
"GL001_L",
"GL002_M",
"GL002_XS",
"GL002_S",
"GL002_L"
];
define('SIZES', array_flip(['XXS', 'XS', 'S', 'M', 'L', 'XL', 'XXL']));
array_multisort(
...array_merge(
array_map(
null,
...array_map(
fn($v) =>
(fn($id, $size) => [$id, SIZES[$size]])(...explode('_', $v, 2)),
$array
)
),
[&$array]
)
);
var_export($array);
preferences:
24.32 ms | 410 KiB | 5 Q