在我的 Controller 中,我按字母顺序将一堆类别传递给 View ,如下所示:
public function index()
{
$categories = Category::orderBy('name', 'asc')->get();
return view('categories')->with('categories',$categories);
}
在我看来,我希望在与字母表中的字母相对应的单独列中显示每个类别,因此在“A”列中我将显示以 A 开头的所有类别,依此类推。
是否可以通过字母过滤 View 中的结果来实现此目的,如果可以,如何实现?
最佳答案
您可以在 Controller 中按首字母对类别列表进行分组,然后将结果传递到您的 View ,操作方法如下:
Controller :
public function index() {
$categories = Category::orderBy('name', 'asc')->get();
$groups = $categories->reduce(function ($carry, $category) {
// get first letter
$first_letter = $category['name'][0];
if ( !isset($carry[$first_letter]) ) {
$carry[$first_letter] = [];
}
$carry[$first_letter][] = $category;
return $carry;
}, []);
return view('categories')->with('groups', $groups);
}
查看:
@foreach($groups as $letter => $group)
<ul>
<li>{{ $letter }}</li>
@foreach($group as $category)
<li>{{ $category['name'] }}</li>
@endforeach
</ul>
@endforeach
这是一个工作 example使用array_reduce (与上面Collection::reduce功能相同)
关于laravel - 如何根据首字母显示 View 中的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47971469/