php - 按姓氏对子数组进行排序
问题描述
我有一个按年份排序的数组,其中有一个带有姓氏键的数组。我正在寻找按姓氏对这些子数组进行排序。
我设法按年份分类。但是里面的数组不是按姓氏排序的。
[
"1946" => [
[
"firstname" => "Juan",
"lastname" => "Darcy"
], [
"firstname" => "Franck",
"lastname" => "Bolly"
]
],
"1945" => [
[
"firstname" => "Pierre",
"lastname" => "Carry"
], [
"firstname" => "Catherine",
"lastname" => "Aarron"
]
]
]
我会在不改变年份顺序的情况下按姓氏重新排序数组,如下所示:
[
"1946" => [
[
"firstname" => "Franck",
"lastname" => "Bolly"
], [
"firstname" => "Juan",
"lastname" => "Darcy"
]
],
"1945" => [
[
"firstname" => "Catherine",
"lastname" => "Aarron"
], [
"firstname" => "Pierre",
"lastname" => "Carry"
]
]
]
我试过这个:
$alumnis_array_number = [];
foreach ($alumnis_array_year as $value) {
$year = $value['year'];
$alumnis_array_number[$year][] = $value;
}
uasort($alumnis_array_number, function($a, $b) {
return strcasecmp($a['lastname'], $b['lastname']);
});
但我得到了
未定义索引:姓氏
如何让这些子数组按姓氏排序?
解决方案
在按年份对数据进行分组之前执行排序似乎更容易。$alumnis_array_year
因此,您将在执行问题中引用的代码之前进行排序:
uasort($alumnis_array_year, function($a, $b) {
$diff = $b["year"] - $a["year"];
if ($diff) return $diff;
$diff = strcasecmp($a['lastname'], $b['lastname']);
if ($diff) return $diff;
return strcasecmp($a['firstname'], $b['firstname']);
});
如果你先这样做,然后执行你的代码,就可以了。