最合适的回答,由SO网友:Egill R. Erlendsson 整理而成
这是我的解决方案
function split_names( $name ) {
$names = explode( " ", trim( join( " ", $name ) ) );
$first_name = array_shift( $names );
$last_name = array_pop( $names );
$middle_name = join( " ", $names );
return array( "first_name" => $first_name, "middle_name" => $middle_name, "last_name" => $last_name );
}
function sort_by_full_name( $arr1, $arr2 ) {
$arr1 = split_names( $arr1 );
$arr2 = split_names( $arr2 );
$retval = strcoll( $arr1[\'first_name\'], $arr2[\'first_name\'] );
if ( ! $retval ) $retval = strcoll( $arr1[\'last_name\'], $arr2[\'last_name\'] );
if ( ! $retval ) $retval = strcoll( $arr1[\'middle_name\'], $arr2[\'middle_name\'] );
return $retval;
}
$users = get_users( array(
\'role\' => \'sm_flagar\',
\'orderby\' => \'display_name\',
\'order\' => \'ASC\'
) );
$user_list = array();
foreach ( $users as $user ) {
$firstName = get_user_meta( $user->ID, \'first_name\', true );
$lastName = get_user_meta( $user->ID, \'last_name\', true );
$user_list[] = split_names( array(
"first_name" => $firstName,
"last_name" => $lastName,
"url" => $user->user_url
) );
}
usort( $user_list, \'sort_by_full_name\' );
setlocale( LC_COLLATE, $locale );
$locale = setlocale( LC_COLLATE, \'is_IS.utf8\' );
foreach ( $user_list as $user ) {
echo \'<li><a href="\' . $user["url"] . \'">\' .
$user["first_name"] . \' \' .
$user["middle_name"]
$user["last_name"] . \'</a></li>\' . PHP_EOL;
}