按姓氏的最后一个字对用户进行排序

时间:2016-08-09 作者:NielsPilon

这可能是一个典型的荷兰语问题,你的姓氏可以包含多个单词。例如罗宾·范佩西或马克·德容。

目前,我有一个按姓氏排序的用户列表,这是get_users. 这在大多数情况下都可以正常工作,但当用户的姓氏包含多个单词时,就会失败。

例如,马克·德容(Mark de Jong)因“de”Jong而列在“C”和“E”之间。然而,应该在“I”和“K”之间列出is,因为Jong应该被视为要排序的单词。

罗宾·范佩西(RobinVanPersie)也是如此,他被列在“U”和“W”之间,因为他属于“范佩西”。然而,它应该列在“O”和“Q”之间,因为Persie应该被视为要排序的单词。

有没有办法为此创建一个函数来解决此问题?

编辑:使用当前代码更新:

$allUsers = get_users(\'orderby=display_name&order=ASC&exclude=1,4\');

$users = array();

// Remove subscribers from the list as they won\'t write any articles

foreach($allUsers as $currentUser)
{
if(!in_array( \'subscriber\', $currentUser->roles ))
 {
    $users[] = $currentUser;
 }
}

usort($users, create_function(\'$a, $b\', \'return strnatcasecmp($a->last_name,     
$b->last_name);\'));

foreach($users as $user)
{

 // Output 
提前感谢!

2 个回复
最合适的回答,由SO网友:Pat J 整理而成

这应该可以做到:

usort($users, \'wpse_235438_sort_users\' );

function wpse_235438_sort_users( $a, $b ) {
    $a_last_name = array_pop( explode( \' \', $a->last_name ) );
    $b_last_name = array_pop( explode( \' \', $b->last_name ) );
    return strnatcasecmp( $a_last_name, $b_last_name );
}
explode() 将您的姓名转换为数组;array_pop() 将为您提供这些数组中的最后一项,这就是您要查找的内容。然后你只需要做你已经在做的比较来对它们进行排序。

在上的PHP页面中使用匿名函数create_function(), 如果您使用的是PHP 5.3或更新版本,那么应该使用anonymous function (或“关闭”)而不是create_function().

usort($users, function( $a, $b ) {
    $a_last_name = array_pop( explode( \' \', $a->last_name ) );
    $b_last_name = array_pop( explode( \' \', $b->last_name ) );
    return strnatcasecmp( $a_last_name, $b_last_name );
} );

SO网友:Florian

我猜你真正的问题是“我怎样才能达到这个结果?”。

我将获取所有用户,将值粘贴到一个数组中,然后对该数组进行排序。

$names = array();

foreach($users as $user)
{
$names[] = $user->first_name.\' \'.$user->last_name;
}

usort($names, function($a, $b) {
    $a = substr(strrchr($a, \' \'), 1);
    $b = substr(strrchr($b, \' \'), 1);
    return strcmp($a, $b);
});

var_dump($names);

相关推荐

如何从USERS-edit.php中删除颜色选择器代码

我知道我不应该改变Wordpress的核心。但如果我想在“用户编辑”中使用仪表板用户配置文件页面。php和删除大块代码(如颜色选择器)的方法。从第259行到第336行-我想全部删除。<?php if ( ! ( IS_PROFILE_PAGE && ! $user_can_edit ) ) : ?> <tr class="user-rich-editing-wrap"> <th scope="