буквенно-цифровая сортировка массива php

Я знаю, что в php есть функции natsort () и natcasesort () для сортировки элементов массива в естественном порядке. Я пытаюсь отсортировать следующие элементы.

 array[0]= '10. xyz';
   array[1]=  '13. xyz';
   array[2]=  '2. xyz';
   array[3]=  '1a. xyz';
   array[4]=  '6. xyz';
   array[5]=  '1b. xyz';
   array[6]=  '4a. xyz';
   array[7]=  '4b. xyz';

теперь, если я применяю natsort (), «10 ..» и «13 ..» помещаются над «1a ..». как я могу заставить мой php-код думать, что «10 ..» больше, чем «1a ...» и «1a ...» должно быть вверху? правильный вывод в моем конкретном случае:

'1a. xyz';
'1b. xyz';
'2. xyz';
'4a. xyz';
'4b. xyz';
'6. xyz';
'10. xyz';
'13. xyz';

Я использовал собственный алгоритм, но он делает то же самое ... он помещает «10 ..» перед «1a ...». Вот моя пользовательская функция:

function cmp($a, $b) {
    $a_ex=explode(".",$a);
    $b_ex=explode(".",$b);
    if ($a_ex[0] == $b_ex[0] ) {
        return 0;
    }
    return ($a_ex[0] < $b_ex[0]) ? -1 : 1;
}
7
задан samach 28 November 2011 в 12:35
поделиться