Можно ли иметь 3 элемента div, и ваш цикл будет заполнять их по порядку? - PullRequest
0 голосов
/ 02 июля 2018

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

Пример того, как я это сделал до сих пор:

<div class="container">
    @foreach($albumImages as $albumImage)
    <div class="centeredImage stickyContainer" style="background-image: url('/storage/uploads/albums/{{$albumName}}/{{$albumImage->file_name}}')">
        <a class='specialA' href=''></a>
    </div>
    @endforeach
</div>

Как вы можете видеть в этом случае, все записи находятся в контейнере div.

Пример того, о чем я думал:

<div class="flex-grid">
    <div class="col-l"></div>
    <div class="col-c"></div>
    <div class="col-r"></div>
</div>

и первая запись входит в col-l, вторая в col-c, третья в col-r, а затем снова начинается с col-l.

Ответы [ 3 ]

0 голосов
/ 02 июля 2018

Другим способом будет array_chunk , а затем просто запустить массив с 2-мя вложенными циклами. Должен быть самоочевидным.

0 голосов
/ 02 июля 2018
<?php

$people =
[
    'John',
    'Paul',
    'Ringo',
    'George'
];

$i=0;
$classes = ['col-a','col-b','col-c'];
foreach($people as $name) {
    $class = $classes[$i++%3];
    ?>
    <div class='<?=$class?>'>
        <?=$name?>
    </div>
    <?php
}

Форматированный вывод:

<div class='col-a'>
John    
</div>
<div class='col-b'>
Paul    
</div>
<div class='col-c'>
Ringo    
</div>
<div class='col-a'>
George    
</div>

Что касается размещения каждого имени в каждом столбце (согласно вашему комментарию), мы могли бы изменить формат массива:

$classes = ['col-a','col-b','col-c'];
$i=0;
foreach($people as $name)
    $columns[$classes[$i++%3]][] = $name;
?>
<?php foreach($columns as $class=>$column) { ?>
    <div class='<?=$class?>'>
        <?php foreach($column as $name) { ?>
            <div class="name">
                <?=$name?>
            </div>
        <?php } ?>
    </div>
<?php } ?>

Форматированный вывод:

<div class='col-a'>
   <div class="name">
      John            
   </div>
   <div class="name">
      George            
   </div>
</div>
<div class='col-b'>
   <div class="name">
      Paul            
   </div>
</div>
<div class='col-c'>
   <div class="name">
      Ringo            
   </div>
</div>
0 голосов
/ 02 июля 2018

Попробуйте это

<div class="flex-grid">
@php($count = 0)
@foreach($albumImages as $albumImage)
    @if ($count % 3 == 0)
        <div class="col-l"></div>
    @elseif($count % 3 == 1)
        <div class="col-c"></div>
    @else
        <div class="col-r"></div>
    @endif
    @php($count++)
@endforeach
</div>

Вы можете использовать этот код, но позже я обновлю свой ответ более хорошим решением

@php($count = 0)
@foreach($albumImages as $albumImage)
    @if ($count % 3 == 0)
        @php($albumImages1[] = $albumImage)
    @elseif($count % 3 == 1)
        @php($albumImages2[] = $albumImage)
    @else
        @php($albumImages3[] = $albumImage)
    @endif
    @php($count++)
@endforeach

@if (!empty($albumImages1))
    @foreach($albumImages1 as $albumImage)
    // your logic here
    @endforeach
@endif

@if (!empty($albumImages2))
    @foreach($albumImages2 as $albumImage)
    // your logic here
    @endforeach
@endif

@if (!empty($albumImages3))
    @foreach($albumImages3 as $albumImage)
    // your logic here
    @endforeach
@endif

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

определить глобальную функцию

function split_sequence_by_count ($array, $count) {
    $result = [];

    for ($i = 0; $i < $count; $i++) {
        $result[$i] = [];
    }

    $_count = 0;

    foreach ($array as $current) {
        $index = $_count % 3;
        $result[$index][] = $current;
        $_count++;
    }

    return $result;
}

использование в клинке

@php(list ($albumImages1, $albumImages2, $albumImages3) = split_sequence_by_count($albumImages, 3))

@foreach($albumImages1 as $albumImage)
    // your logic here
@endforeach

@foreach($albumImages2 as $albumImage)
    // your logic here
@endforeach

@foreach($albumImages3 as $albumImage)
    // your logic here
@endforeach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...