сортировка массива имен в php - PullRequest
0 голосов
/ 28 июля 2010

У меня есть массив имен людей:

Array
(
    [1] => A. Aitken
    [2] => A. C. Skinner
    [3] => A. Chen
    [4] => R. Baxter
)

Какой самый быстрый способ сортировки массива в (алфавитном) порядке фамилии в php? т.е. дать

Array
(
    [1] => A. Aitken
    [4] => R. Baxter
    [3] => A. Chen
    [2] => A. C. Skinner
)

Ответы [ 3 ]

5 голосов
/ 28 июля 2010
function cmp($a, $b)
{
    $a1 = explode(' ', $a);
    $b1 = explode(' ', $b);
    return strcasecmp(end($a1), end($b1));
}

usort($arr, 'cmp');
3 голосов
/ 28 июля 2010

Посмотрите на uksort и приведенный там пример, который очень похож на вашу проблему.

Возможно, вы захотите заменить регулярные выражения на

preg_replace("/[A-Z]\\. /", '', $a);
1 голос
/ 28 июля 2010

Вы можете сортировать, используя шаблон decorate-sort-undecorate, по ключу, являющемуся последним элементом массива, который является результатом разбиения вашей строки пробелами

$arr = array(                                                                                                                                               
'A. Aitken',                                                                                                                                               
'A. C. Skinner',                                                                                                                                           
'A. Chen',                                                                                                                                                 
'R. Baxter'                                                                                                                                                
);                                                                                                                                                          

// actual sorting below                                                                                                                                     
$arr= array_map(create_function('$a', 'return array(array_slice(explode(" ", $a), -1), $a);'), $arr); // transform into array of arrays consisted of sort key and item  
sort($arr); // sort array of arrays                                                                                                                         
$arr = array_map('end', $arr); // take only last element from each array                                                                                    

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