PHP按字符串中最后一个单词的字母顺序排列数组


php alphabetically order an array by last word in string

我有一个数组。如:

names = {
    'John Doe',
    'Tom Watkins',
    'Jeremy Lee Jone',
    'Chris Adrian'
    }

我想按姓氏的字母顺序排序(字符串中的最后一个单词)。这能做到吗?

$names = array(
    'John Doe',
    'Tom Watkins',
    'Jeremy Lee Jone',
    'Chris Adrian',
);
usort($names, function($a, $b) {
    $a = substr(strrchr($a, ' '), 1);
    $b = substr(strrchr($b, ' '), 1);
    return strcmp($a, $b);
});
var_dump($names);

在线演示:http://ideone.com/jC8Sgx

您可以使用名为usort (http://php.net/manual/en/function.usort.php)的自定义排序函数。这允许您创建一个指定的比较函数。

那么,你创建一个像这样的函数…

function get_last_name($name) {
    return substr($name, strrpos($name, ' ') + 1);
}
function last_name_compare($a, $b) {
    return strcmp(get_last_name($a), get_last_name($b));
}

,然后使用ussort函数进行最终排序:

usort($your_array, "last_name_compare");

您要查看的第一个函数是sort。接下来是explode

$newarray = {};
foreach ($names as $i => $v) {
    $data = explode(' ', $v);
    $datae = count($data);
    $last_word = $data[$datae];
    $newarray[$i] = $last_word; 
}
sort($newarray); 

还有另一种方法:

<?php 
// This approach reverses the values of the arrays an then make the sort...
// Also, this: {} doesn't create an array, while [] does =)
$names = [
    'John Doe',
    'Tom Watkins',
    'Jeremy Lee Jone',
    'Chris Adrian'
    ];
foreach ($names as $thisName) {
    $nameSlices = explode(" ", $thisName);
    $sortedNames[] = implode(" ", array_reverse($nameSlices));
}
$names = sort($sortedNames);
print_r($sortedNames);
 ?>