php if итератор делится на оператор для динамических столбцов - PullRequest
4 голосов
/ 13 июля 2010

Я пытаюсь создать динамический список столбцов, который будет всего 4 столбца (PHP). Я повторяю массив, и после того, как каждый раз выводятся 4 элемента массива, я бы хотел обернуть эти 4 элемента массива в div, называемый «столбец».

В общем, я подумал, что мог бы сделать это с помощью самосчитанного оператора $ i ++, но сначала у меня возникли проблемы с запуском счетчика с нуля (я пытался установить переменную изначально вне для каждого цикла.)

В любом случае, если бы вы могли показать мне, как проверить, делится ли $ ++ на 4 в php, чтобы я мог вставить, если $ i ++ делится на 4, то echo "", это будет быть высоко ценится. Но сначала я считаю, что мне нужно выяснить, как начать подсчет с 1 (чтобы $ i ++, делимый на 4, работал бы ... правильно ??)

Ответы [ 3 ]

12 голосов
/ 13 июля 2010

Если вы поделите на 4, это будет целочисленное деление, а частное - это коэффициент 4. То, что вы, вероятно, захотите, это оператор модуля %.Это даст вам остаток.Поэтому, если $i кратно 4, оно будет равно 0.

if (($i % 4) == 0) {
  // evenly divisible by 4 logic
}

Модуль может быть неэффективным.Поскольку вы делите на кратное 2, вы можете сдвинуть биты вправо на 2. Это то же самое, что делить на 4 и намного эффективнее.Проверьте битовое смещение .

5 голосов
/ 13 июля 2010

% является оператором модуля. Возвращает остаток после деления, поэтому 7 % 4 == 3.

Вы действительно должны начинать с 0. Это потому, что 0 % 4 == 0 и 4 % 4 == 0 ... И вы хотите, чтобы самый первый элемент был новой строкой! Таким образом, вы хотите новые строки в 0, 4, 8 и т. Д. ... Если вы начнете с 1, то 1, 2 и 3 не будут в строке.

Кроме того, мы должны не забывать закрывать строку каждого элемента перед новой строкой.

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

Я покажу, как это сделать с таблицами, но вы можете использовать div с классами так же просто, как и просто.

<table>
    <?php
    // Start at zero, so we start with a new row
    // Since we start at 0, we have to use < number of items, not <=
    for ($i = 0; $i < $numberOfItems; ++$i)
    {
        // if divisible by 0 start new row
        if ($i % 4 == 0)
            echo '<tr>';
        // Always print out the current item
        echo '<td>' . $item[$i] . '</td>';
        // If the next $i is divisible by 4, we have to close the row
        if ($i % 4 == 3)
            echo '</tr>';         
    }
    // If we didn't end on a row close, make sure to close the row
    if ($i % 4 != 3)
        echo '</tr>';
    ?>
</table>
0 голосов
/ 13 июля 2010

Modulus!

$a % $b Остаток $ a, деленный на $ b.

http://php.net/manual/en/language.operators.arithmetic.php

...