Решение для запросов - это хороший подход и, вероятно, предпочтительный метод, если вы можете понять, как это сделать.Однако, без дополнительной информации, вот PHP-решение, которое даст вам желаемые результаты.
Это решение учитывает либо "/", либо "-" и сохраняет "/" или "- "в отсортированном массиве.Это некрасиво, но работает.
<code>$data = array(
'XBX/124/18',
'XX/10/18',
'XMX/12/18',
'XX/8/18',
'XX-123-18',
'XXX/88/18',
'XX-68-18',
'XX-145-18',
'YYY/5/18'
);
for($i = 0; $i < count($data); $i++){
if(preg_match('/\//', $data[$i])){
$data[$i] = preg_replace('/\//', ' ', $data[$i]);
$parsed[$i] = explode(' ', $data[$i]);
$parsed[$i][3] = '/';
}elseif(preg_match('/-/', $data[$i])){
$data[$i] = preg_replace('/-/', ' ', $data[$i]);
$parsed[$i] = explode(' ', $data[$i]);
$parsed[$i][3] = '-';
}
}
$temp = $parsed;
usort($parsed, function($a, $b){ //Will sort by middle and right values.
if([$a[1], $a[2]] > [$b[1], $b[2]]){
return 1;
}elseif([$a[1], $a[2]] < [$b[1], $b[2]]){
return -1;
}else{
return 0;
}
});
for($i = 0; $i < count($parsed); $i++){
$sorted[] = $temp[$i][0] . $parsed[$i][3] . $parsed[$i][1] . $parsed[$i][3] . $parsed[$i][2];
}
echo '<pre>';
print_r($sorted);
echo '
';
Будет выведено:
Array
(
[0] => XBX/5/18
[1] => XX/8/18
[2] => XMX/10/18
[3] => XX/12/18
[4] => XX-68-18
[5] => XXX/88/18
[6] => XX-123-18
[7] => XX/124/18
[8] => YYY-145-18
)