Оберните div.container вокруг в foreach

Может быть, простой вопрос, вот оно.
У меня есть простой скрипт php foreach, который хорошо выводит результаты. Мне нужно обернуть результаты контейнером div для каждого второго элемента. Примером может быть:

Как выглядит сценарий

$result = $wpdb->get_results('SELECT id, fdate, tdate FROM database');
$i = 0;
foreach ($result as $date):
$i++;
echo '<div class="range" data-range="'. $date->id .'">';
echo 'test';
echo '</div>';
endforeach;

Будет выводить:

<div class="range" data-range="00000000"></div>
<div class="range" data-range="00000000"></div>
<div class="range" data-range="00000000"></div>
<div class="range" data-range="00000000"></div>
<div class="range" data-range="00000000"></div>
<div class="range" data-range="00000000"></div>

Но мне нужен следующий пример: контейнер div, обернутый вокруг диапазона для каждого второго результата. Как это:

<div class="container">
<div class="range" data-range="00000000"></div>
<div class="range" data-range="00000000"></div>
</div>
<div class="container">
<div class="range" data-range="00000000"></div>
<div class="range" data-range="00000000"></div>
</div>
<div class="container">
<div class="range" data-range="00000000"></div>
<div class="range" data-range="00000000"></div>
</div>

Я пробовал с:

$result = $wpdb->get_results('SELECT id, fdate, tdate FROM database');
$i = 0;
foreach ($result as $date):
$i++;
if($i%2 == 0) {
echo $i > 0 ? "</div>" : "";
echo "<div class='container'>";
}
echo '<div class="range" data-range="'. $date->id .'">';
echo 'test';
echo '</div>';
endforeach;

Но это не будет работать правильно с результатом, который я ищу 🙂
Идеи? знак равно

2

Решение

Этот фрагмент должен дать вам то, что вам нужно

$result = $wpdb->get_results('SELECT id, fdate, tdate FROM database');
$i = 0;
foreach ($result as $date):
$i++;
if($i%2 == 1) {
echo '<div class="container">';
}
echo '<div class="range" data-range="'. $date->id .'"></div>';
if($i%2 == 0) {
echo '</div>';
}
endforeach;
2

Другие решения

Вы были очень близки 🙂

Вы хотите, чтобы ваш контейнер отображался вне цикла foreach.

$result = $wpdb->get_results('SELECT id, fdate, tdate FROM database');
$i = 0;
echo '<div class="container">';
foreach ($result as $date):
$i++;
echo '<div class="range" data-range="'. $date->id .'">';
echo 'test';
echo '</div>';
endforeach;
echo '</div>';

РЕДАКТИРОВАТЬ: Извините, я неправильно понял ваш вопрос, но все еще довольно просто.

$result = $wpdb->get_results('SELECT id, fdate, tdate FROM database');
$i = 0;
foreach ($result as $date):
$i++;
if($i%2 == 1) {
echo "<div class='container'>";
}
echo '<div class="range" data-range="'. $date->id .'">';
echo 'test';
echo '</div>';
if($i%2 == 0) {
echo "</div>";
}
endforeach;

РЕДАКТИРОВАТЬ 2: Вау, это действительно даже не так просто. Вы не закроете последний тег, если будет нечетное количество результатов. Итак, вы действительно хотите это:

$result = $wpdb->get_results('SELECT id, fdate, tdate FROM database');
$i = 0;
foreach ($result as $date):
if($i%2 == 0) {
echo "<div class='container'>";
}
echo '<div class="range" data-range="'. $date->id .'">';
echo 'test';
echo '</div>';
if($i%2 == 1) {
echo "</div>";
}
$i++;
endforeach;
if($result->Size() % 2 == 1)
{
echo '</div>';
}
1

<?php
define ('TEMPLATE_SUB_CONTAINER',   '<div class="range" data-range="%s">%s</div>');
define ('TEMPLATE_CONTAINER',       '<div class="container">%s</div>');

$result = $wpdb->get_results('SELECT id, fdate, tdate FROM database');
$i      = 0 ;
$buffer = '';

foreach ($result as $date):
if ($i == 2) {
flushBuffer($buffer);
$buffer = '';
$i=0;
}
$buffer .= sprintf(TEMPLATE_SUB_CONTAINER . '<br />', $date->id, 'test');
$i++;
endforeach;
flushBuffer($buffer);

function flushBuffer($buffer) {
if (strlen($buffer) > 0) {
$buffer .= spintf(TEMPLATE_CONTAINER, $buffer);
printf("%s", $buffer);
}
}
1