Вложенный цикл foreach, не разделяющий данные коллекции в Laravel

#php #laravel

#php #laravel

Вопрос:

У меня есть два поля в базе данных с именами «Даты событий» и «Описания событий». Он хранит массив коллекции дат и описаний.

Теперь я хочу показать их на временной шкале таким образом, чтобы каждое описание отображалось перед его датой.

Например, первая дата должна иметь только событие 1. Вторая дата должна иметь только событие 2 и так далее. Но я не получаю желаемого результата. Мои даты отображаются правильно, но описание выглядит не так, как должно быть.

См.

введите описание изображения здесь

Как я могу вывести одно описание для каждой даты?

Блейд

 <div class="expanded-list">
    <div id="faq6" class="collapse" data-parent=".faq-list">

        @php
            $events = explode (",", $row->get_event_dates);
            $details = explode (",", $row->get_event_descriptions);
        @endphp

        <div class="col-md-6">
            <div class="main-card mb-3 card">
                <div class="card-body">
    
                    @foreach ($events as $key => $val)
                        <div class="vertical-timeline-item vertical-timeline-element">
                            <div class="vertical-timeline-element-content bounce-in">

                                @foreach ($details as $key => $detail)
                                    <p>{{ $detail }}</p> 
                                @endforeach
                            
                                <span class="vertical-timeline-element-date">{{ $val }}</span>                            
                            </div>
                        </div>
                    @endforeach

                 </div>
             </div>
        </div>
    </div>
</div>
  

Комментарии:

1. Почему они находятся в двух отдельных переменных? Если у вас есть отношения и запросы, настроенные правильно, $events = Event::with("details")->get() и все готово. Не добавляйте логику в свое представление, подготовьте переменные в своем контроллере и передайте их.

Ответ №1:

ваш второй цикл foreach повторяется для каждого цикла первого foreach. и выводит каждое значение для каждого элемента первого цикла. вам не нужен второй цикл foreach. предполагая, что у вас одинаковая длина обоих массивов. поэтому просто выполните цикл один раз и получите значение второго массива с помощью key .

 @foreach ($events as $key => $val)
    <div class="vertical-timeline-item vertical-timeline-element">
        <div class="vertical-timeline-element-content bounce-in">
            <p>{{ $details[$key] }}</p> 
            <span class="vertical-timeline-element-date">{{ $va l}}</span>                            
        </div>
    </div>
@endforeach
  

и если у вас почему-то нет одинаковой длины для обоих массивов, вы можете проверить индекс массива

 @if (isset($details[$key]))
    <p>{{ $details[$key] }}</p>
@else
    <p>--</p>
@endif
  

Комментарии:

1. Потрясающая работа, братан!! Я застрял на этой проблеме в течение последних 4 часов, и вы сэкономили мое время. Да благословит вас Аллах!

2. Не могли бы вы, пожалуйста, немного рассказать о том, как вы заставили его работать с $key другого поля базы данных?

3. Я понял. Спасибо, приятель!