我问了一个类似的问题,但在某些方面仍然存在问题。
这个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查询设置)。 还有一些新的功能。
答案 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')));
?>