姓氏usort

时间:2016-03-22 17:28:38

标签: php sorting

我问了一个类似的问题,但在某些方面仍然存在问题。 这个php文件的工作方式是人员名称存储在names单元格的数据库中,格式为John Doe(名字姓氏)。所以我用这个代码分隔了名字,所以姓氏,名字:

foreach ($customer_names as $key => $value) {
                        $parts = explode(" ", $value->name);
                        $lastname = array_pop($parts);
                        $firstname = implode(" ", $parts);                      
                        $name = $lastname.", ".$firstname." ";

                        echo "<option value='$value->name'>$name </option>";

现在给我一个名单,如Doe,John。 但是,我需要按姓氏的顺序对名称进行排序。 使用usort。我该怎么办?我试过玩代码,但仍然按照名字的顺序显示(由db查询设置)。 还有一些新的功能。

2 个答案:

答案 0 :(得分:0)

这应该有效:

usort($customer_names, function($customer1, $customer2) {
    return strcmp(
        substr($customer1->name, strrpos($customer1->name, " ")),
        substr($customer2->name, strrpos($customer2->name, " "))
    );
});

然后,您的$customer_names数组将按客户的姓氏排序。姓氏表示最后一个空格之后的字符串,例如John Doe将是Doe。 Mary Lou Foo将成为Foo。

请参阅http://php.net以了解有关所用功能的更多信息。

答案 1 :(得分:0)

//Program for sorting list of names according to last name
<?php  
class array_sort  
{   
    public $temp;
    public function alhsort(array $sorted)  
     {  
        for($i=0; $i<count($sorted)-1; $i++){
            for($j=$i+1; $j<count($sorted); $j++){
                if(strcasecmp(end(explode(' ', $sorted[$i])), end(explode(' ', $sorted[$j])))>0){
                    $temp =  $sorted[$i];
                    $sorted[$i] = $sorted[$j];
                    $sorted[$j] = $temp;
                }
            }
        } 
        return $sorted;  
      }  
}  
$sortarray = new array_sort();  
print_r($sortarray->alhsort(array('Ayush Jain', 'Abhishek Gupta', 'Rahul Rajput', 'Kapil Patel', 'Shobit Shrivastav', 'Hitesh Gupta')));  
?>