Laravel:按姓氏在单个字符串中对集合进行排序

时间:2019-04-21 19:34:34

标签: php laravel sorting

我正在尝试对一个集合进行排序,该集合由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']]

谢谢!

1 个答案:

答案 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');