Как сделать первые два элемента массива с классами odd и even а следующие два наоборот

213
02 июля 2017, 15:34

Всем, привет. как сделать первые два элемента массива с классами horizontal и vertical, а следующие два наоборот vertical и horizontal и повторить с начала.

<?
    $arr = array(
        array('ID'=>1, 'NAME'=>'a'),
        array('ID'=>2, 'NAME'=>'b'),
        array('ID'=>3, 'NAME'=>'c'),
        array('ID'=>4, 'NAME'=>'d'),
        array('ID'=>5, 'NAME'=>'f'),
        array('ID'=>6, 'NAME'=>'g')
    );
    $i = 0;
    $el_in_row = 2;
?><div class="row clearfix"><?
    foreach($arr as $key => $arItem)
    {
        $class = ($i%2 === 0)?'horizontal':'vertical';
        ?><div class="<?=$class;?>"><?=$arItem['NAME'];?></div><?
        $i++;
        if($i >= $el_in_row)
        {
            $i = 0;
            ?></div><div class="row clearfix"><?
        }
    }
?>
</div>

получаю

<div class="row clearfix">
    <div class="vertical">a</div>
    <div class="horizontal">b</div>
</div>
<div class="row clearfix">
    <div class="vertical">c</div>
    <div class="horizontal">d</div>
</div>
<div class="row clearfix">
    <div class="vertical">f</div>
    <div class="horizontal">g</div>
</div>

а хотелось бы так

<div class="row clearfix">
    <div class="vertical">a</div>
    <div class="horizontal">b</div>
</div>
<div class="row clearfix">
    <div class="HORIZONTAL">c</div>
    <div class="VARTICAL">d</div>
</div>
<div class="row clearfix">
    <div class="vertical">f</div>
    <div class="horizontal">g</div>
</div>

Убедительная просьба, не отписывайтесь не проверив! Заранее спасибо.

Answer 1
<?php
    $arr = array(
        array('ID'=>1, 'NAME'=>'a'),
        array('ID'=>2, 'NAME'=>'b'),
        array('ID'=>3, 'NAME'=>'c'),
        array('ID'=>4, 'NAME'=>'d'),
        array('ID'=>5, 'NAME'=>'f'),
        array('ID'=>6, 'NAME'=>'g')
    );
    $el_in_row = 2;
?>
<div class="row clearfix">
    <php foreach($arr as $key => $arItem): ?>
        <div class="<?=((1 === $key % 4 || 2 === $key % 4) ? 'horizontal' : 'vertical'); ?>">
            <?=$arItem['NAME'];?>
        </div>
        <?php if(0 === ($key + 1) % $el_in_row): ?>
            </div><div class="row clearfix">
        <?php endif; ?>
    <?php endforeach; ?>
</div>
Answer 2

Сделай так

<?
$arr = array(
    array('ID'=>1, 'NAME'=>'a'),
    array('ID'=>2, 'NAME'=>'b'),
    array('ID'=>3, 'NAME'=>'c'),
    array('ID'=>4, 'NAME'=>'d'),
    array('ID'=>5, 'NAME'=>'f'),
    array('ID'=>6, 'NAME'=>'g')
);
$i = 0;
$j = 0;
$el_in_row = 2;
?><div class="row clearfix"><?
foreach($arr as $key => $arItem)
{
    $class = ($j%2 === 0)?'horizontal':'vertical';
    ?><div class="<?=$class;?>"><?=$arItem['NAME'];?></div><?
    $i++;
    $j++;
    if($j%2 === 0){
        $j++;
    }
    if($i >= $el_in_row)
    {
        $i = 0;
        ?></div><div class="row clearfix"><?
    }
}
?>
READ ALSO
Программа автоматизации Excel C++ Builder

Программа автоматизации Excel C++ Builder

Задачей есть приложение, которое будет открывать xls-файл, редактировать по шаблону в нём выбранную колонку (в данном случае дату) и сохранять...

213
Какая нотация используется в стандарте ISO 14882?

Какая нотация используется в стандарте ISO 14882?

Стало интересно, как читать стандартФормальные правила типа BNF, EBNF, Z, ASN

212
Отправка большого tcp-пакета по сегментам

Отправка большого tcp-пакета по сегментам

Пишу программу для перехвата tcp-трафика в корпоративной сети, при котором клиенту отправляется обратно tcp-пакет с html-страницей (какая-нибудь...

211