在php中排序名称数组

时间:2010-07-28 00:29:18

标签: php arrays sorting

我有一系列人名:

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 个答案:

答案 0 :(得分:5)

function cmp($a, $b)
{
    $a1 = explode(' ', $a);
    $b1 = explode(' ', $b);
    return strcasecmp(end($a1), end($b1));
}

usort($arr, 'cmp');

答案 1 :(得分:3)

查看uksort以及那里给出的示例,这与您的问题非常相似。

您可能希望用

替换那里的正则表达式
preg_replace("/[A-Z]\\. /", '', $a);

答案 2 :(得分:1)

您可以使用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);