我正在尝试对一个集合进行排序,该集合由ID和全名组成,按姓氏的字母顺序排列。 id来自父类,全名来自孩子。
我尝试根据姓氏分解字符串并进行排序,但实际上无法正确地对ID进行重新排序。 我在获取集合时尝试使用sortBy,在检索后尝试使用usort
$testExaminers=TestExaminer::where('test_id',$request->testid)
->with('examiner')
->get()
->sortBy('examiner.name');
$result = array();
$num=0;
foreach($testExaminers as $testExaminer) {
$result[$num]['id'] = (int) $testExaminer->examiner_id;
$result[$num]['text'] = $testExaminer->examiner->name;
$num++;
}
echo json_encode(['examiners'=>$result]);
上面的代码可以按姓氏排序,但我需要按姓氏排序。
用户输入test_id,该列表提供“ TestExaminers”的列表,每个都有与唯一的“ examiner”相关联的属性“ examiner_id”,后者又具有名称“ firstname middlename lastname”。 所以应该看起来像这样
在排序之前
$result = [[1,'Alpha Z. Goodman'],[2,'Joe Bman'],[3,'ZZ Top'],[4,'Joe Aman']]
排序后
$result = [[4,'Joe Aman'],[2,'Joe Bman'],[1,'Alpha Z. Goodman'],[3,'ZZ Top']]
谢谢!
答案 0 :(得分:0)
尝试这样的事情如何?
$testExaminers = TestExaminer::where('test_id', $request->testid)
->with('examiner')
->get()
->map(function ($item, $key) {
$item->examiner->last_name = array_slice(explode(' ', $item->examiner->name), -1)[0];
return $item;
})
->sortBy('examiner.last_name');