2015-10-16 2 views
-1

У меня есть простой цикл foreach, который выводит информацию, которую я хочу.PHP: Эхо что-то для каждого 2 результата

Однако, я хочу обернуть его div для каждых двух результатов. Я пробовал оператор модуля без успеха (результат применяется для каждого результата).

Итак, мой код:

foreach ($result->data as $info) { 

    // A open div to wrap two results 
    echo 'something'; 
    // An closing div to wrap the previous two results 
} 
+0

идею с помощью модуль оператора звучит разумно. как вы его использовали? show your (not working) try – dbarthel

+0

Поместите 'for ($ i = 0; $ i <2; $ i ++)' внутри вашего 'foreach' или посчитайте его только для' for'. Я что-то пропустил? Потому что я не вижу в этом точки «модуля». –

+0

Модуль упрощает работу без дополнительной вложенной петли. –

ответ

1

Это будет сделай это!

foreach ($result->data as $i=>$info) { 
    if ($i % 2 == 0) echo '<div>'; 
    echo $info; 
    if ($i % 2 == 1) echo '</div>'; 
} 
if (count($result->data) % 2 == 1) echo '</div>'; 

именно то, что вы просили;)

+0

Спасибо @Sebastian Sejzer работал как шарм! Ясно и понятно! –

0

добавить подсчитывать индекс, то убедитесь, что его делится на два в коде. В этом случае, если блок должен быть в верхней части петли Еогеасп, так как я начал $ я в 0. Пожалуйста, прекратите редактирование этой части :)

$i = 0; 
// Create first new div before loop, here. 
echo '<div>'; //first div 
foreach ($result->data as $info) { 

    // An closing div to wrap the previous two results 
    if ($i % 2){ 
     // Code here would occur after each two iterations 
     // IE: close div then open new one. something like this 
     echo '</div><div>'; 
    } 

    // A open div to wrap two results 
    echo 'something'; 

    $i++; 
} 
// close final div after loop, here. 
echo '</div>'; 
+0

О, теперь я это вижу. –

+0

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

+0

Я не вижу, что это так. Цикл будет на третьей итерации перед закрытием первого div и будет открыт на секунду. Пока общие элементы делятся на 2, они должны выводиться правильно ... в качестве альтернативы один дополнительный элемент будет в конце div в конце. –

0

Самый простой способ: Перебор с шагом 2.

for ($cc = 0; $cc<count($result->data); $cc += 2) { 
    // here >> start div container for both 
    echo $result->data[$cc]; 
    if (defined($result->data[$cc+1])) 
     echo $result->data[$cc+1]; 
    // here >> end div container for both 
} 

HTML опущен для четкости.

Вы также можете добавить ветку else для вывода заполнителя, если результат содержит нечетное количество элементов.

-1

набор 2 переменные, строки и Int
сохранить значение в переменной строки, если значение переменной Int даже не
, когда вторая переменная является четным числом
обертывание в DIV

0

Для вывода каждые два результата из массива можно также использовать

<?php 

$array = range(1, 20); 

foreach(array_chunk($array, 2) as $pair) { 
    echo '<div>' , implode(' ', $pair) , '</div>'; 
} 

// <div>1 2</div> 
// <div>3 4</div> 
// etc 

?> 
-1

// просто

<?php 
    foreach($result->data as $i=>$info){ 
    if($i<5){ 
     echo $info 
} 
}   
?> 
Смежные вопросы