alexander7779
@alexander7779
SEO, PHP (разработка на Laravel).

Сделать первые буквы массива разделителями в Blade Laravel?

Добрый день. Написал почти рабочий вариант а PHP, но как-то некрасиво выглядит в шаблонизаторе Blade.
Может кто знает как в blade подобное реализовать.
Хочу разделить список марок, буквами по алфавиту. Есть и на кирилице названия.
В шаблон передаётся объект.
который уже содержит данные по каждой марке авто.
но как вывести стандартными средствами в Blade, в виде
A
Acura
Audi
B
BMW
Bugatti
BYD
и.т.д

Обычный список достаю так.
@foreach($allMark as $mark)
    <li class="mark-list-li">
         <a href="/{{$mark->url}}/"><span class="name-li">{{$mark->name}}</span> ({{$mark->rus_name}})</a><span class="gray-color"> - {{$mark->models_count}} моделей</span>
     </li>
@endforeach
  • Вопрос задан
  • 277 просмотров
Решения вопроса 2
@anlamas
https://laravel.com/docs/5.6/collections#method-groupby
$allMark = $allMark->groupBy(function ($item, $key) {
    return strtoupper(mb_substr($item->name, 0, 1));
});

@foreach($allMark as $key => $marks)
    {{ $key }}
    @for@foreach($marks as $mark)
        {{  $mark->name }}
    @endforeach
@endforeach
Ответ написан
@Kostik_1993
Fullstack Web Developer | PHP | Laravel | Vue.js
Вариации под ваши нужды думаю допишите самостоятельно
@php
    // вариант с массивами
    $abcMarks = [];
    $oldFirst = null;
    foreach ($makes as $make) {
        $i = $oldFirst == mb_substr($make->name, 0, 1) ? $oldFirst : mb_substr($make->name, 0, 1);
        $abcMarks[$i][] = $make->name;
    }

    // или вариант с коллекциями
    $abcMarks = $makes->groupBy(function ($item, $key) {
        return strtoupper(mb_substr($item->name, 0, 1));
    });
@endphp

<div class="marks">
    @foreach($abcMarks as $key => $marks)
    <div class="marks__group">
        <div class="marks__title"><strong>{{ $key }}</strong></div>
        <div class="marks__list">
            @foreach($marks as $mark)
                <div class="marks__item">
                    {{ $mark }}
                </div>
            @endforeach
        </div>
    </div>
    @endforeach
</div>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
solotony
@solotony
ушел пить чай %)
стандартным blade не получится. придется делать php вставки. хотя вариант, который тебе предложилив комментах с двухуровневым массивов красив
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы