首页 > 解决方案 > 嵌套的 foreach 循环不拆分 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>

标签: phplaravel

解决方案


您的第二个 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

推荐阅读