сортировка массива php в алфавитном порядке - PullRequest
7 голосов
/ 28 ноября 2011

Я знаю, что в 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;
}

Ответы [ 3 ]

5 голосов
/ 28 ноября 2011

Используйте natsort ():

$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($array);

print_r($array);
1 голос
/ 28 ноября 2011

у меня нацорт работает нормально ...

В противном случае используйте str_pad для форматирования чисел перед сортировкой массива.

Или вы можете использовать usort с пользовательской функцией, может быть, с intval ...

0 голосов
/ 28 ноября 2011

используйте usort с вашим собственным алгоритмом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...