我正在尝试按字母顺序对一系列学生姓名进行排序。在数组中,我们有$ user ['firstname']和$ user ['lastname']。我想对它进行排序,使得A / a首先出现,然后Z / z出现在最后。如果他们的名字相同,那么我们将与姓氏进行比较。我的问题是我已经为这个排序创建了功能,但它不区分大小写。
这是我到目前为止所做的:
uasort($students, array($this, 'nameCompare'));
private function nameCompare($a, $b)
{
if ($a['firstname'] == $b['firstname'])
{
if($a['lastname'] < $b['lastname'])
{
return -1;
}
else if ($a['lastname'] > $b['lastname'])
{
return 1;
}
else //last name and first name are the same
{
return 0;
}
}
return ($a['firstname'] < $b['firstname']) ? -1 : 1;
}
感谢您的帮助。
答案 0 :(得分:1)
以下是一个例子:
usort($students, function($a, $b) {
if($cmp = strnatcasecmp($a['lastname'], $b['lastname'])) return $cmp;
return strnatcasecmp($a['firstname'], $b['firstname']);
});
答案 1 :(得分:-2)
我认为strtolower功能可能很有用。在函数开头添加:
$a['firstname'] = strtolower($a['firstname']);
$a['lastname'] = strtolower($a['lastname']);
$b['firstname'] = strtolower($b['firstname']);
$b['lastname'] = strtolower($b['lastname']);
通过这样做,您将所有值转换为小写,删除函数的“敏感性”。
希望它有所帮助。