У меня есть набор результатов (например, [1,2,3,4,5,6,7,8,9,10,11]).
Который я хочу отображать в виде 1 строки с 3 столбцами
1|5|9
2|6|10
3|7|11
4|8|
Я получаю 1 строку с 4 столбцами
1|4|7
2|5|8
3|6|9
10|
11|
Пока я не добавлю 12-й объект, я получаю 1 строку с 3 столбцами
1|5|9
2|6|10
3|7|11
4|8|12
Мой код в шаблоне лезвия
<!-- partials/tables/table_list.blade.php -->
@section('tables')
<?php $chunkSize = floor(count($tables) / 3); ?>
<section id="tables-overview">
<div class="row">
@foreach ($tables->chunk($chunkSize , 1) as $chunk)
<div class="col-md-4">
@include('partials.tables.table_chunk')
</div>
@endforeach
</div>
</section>
@endsection
<!-- partials/tables/table_chunk.blade.php -->
<table class="table table-responsive">
<thead>
<tr>
<th class="text-center">@lang('table.identifier')</th>
<th class="text-center">@lang('table.property')</th>
<th class="text-center">
@permission('manage-tables')
<a href="{{ route('CreateTable') }}">@lang('action.create')</a>
@endpermission
</th>
</tr>
</thead>
<tbody>
@foreach ($chunk as $table)
<tr>
<td class="text-center">{{ $table->getId() }}</td>
<td class="text-center">{{ $table->getProperty() }}</td>
<td class="text-center">
@permission('manage-tables')
<a class="btn btn-primary" href="{{ route('UpdateTable', ['id' => $table->getId()]) }}">@lang('action.update')</a>
@endpermission
</td>
</tr>
@endforeach
</tbody>
</table>
Когда количество таблиц $ можно разделить на 3 (количество столбцов, которые я хочу), я получаю 3 блока. Если нет, я получаю 3 куска + оставшиеся 1 или 2 объекта, которые помещаются в 4-й столбец. Я могу разместить их горизонтально, как сделано Вот но я нахожу это странным. При чтении списка вы сначала читаете сверху вниз, а затем слева направо.
ОБНОВИТЬ
Я также попытался использовать ceil (), как предложено Хузаиб Шафи. Но тогда я получаю
4 objects (funny looking)
1|3|
2|4|
5 objects (better looking)
1|3|5
2|4
что также не на 100% то, что я хотел, но довольно близко к этому. Я попробую предложение Хомам Альхайтам следующий.
Когда ты floor
результат деления, вы получите меньшее число.
Объяснение: floor (11/3) = 3. Следовательно, ваш результат получает 3 порции за раз (в результате; [3,3,3,2]), однако нам нужно [4,4,3].
Так что вам нужно ceil
Это. Даю вам 4, таким образом, результат.
<?php $chunkSize = ceil(count($tables) / 3); ?>
после того, как вы получите $ items при извлечении данных из базы данных и использовании примера цикла
$c=0;
echo '<div class="row">';
while(bla bla bla ..){
// counter
$c++;
echo '<div class="col-md-4">
some thing
</div>';
if(fmod($c,3)==0){
echo '</div><div class="row">';
}
}
echo '</div>';
здесь я использовал fmod ($ c, 3) 3 число из ваших столбцов и fmod возвращает 0, если $ c равен 6,9,12,15,18 …..
использование array_chunk.
Предполагая, что у вас есть следующий массив:
[
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
];
В вашем .blade.php
файл вы можете сделать что-то вроде этого:
@section('tables')
<section id="tables-overview">
<div class="row">
@foreach (array_chunk($tables, 3) as $chunk)
<div class="col-md-4">
@foreach($chunk as $key => $value)
//@include('partials.tables.table_chunk')
// No need to include anything here
// just write your table instead of including
@endforeach
</div>
@endforeach
</div>
</section>
@endsection