camelCase
camelCase

Reputation: 5598

Matching variable to every 4th number in a loop - PHP

I am needing to add a different class at the end of every 4th item that I am looping through. I have done so by:

$i=0;
foreach($mount as $m){
    $i++;
    $startClass = '';
    if($i==4||$i==8||$i==12){$startClass='<div with class>';} //adds class on 4th intervals
    $ret.=''.$startClass.'<other HTML here and such>'; //shorted for readability
}

Now I'm sure there is a more appropriate way to handle this given the fact that if my loop contains 40 objects, I'll need to adjust the if statement accordingly.

I'm recalling an arithmetic formula that might work [an = a1+(n-1)d] but I'm finding that my idea seems off. I apply it (replacing an with i) and it will always = to the equation, thus each item gets the class.

Any suggestions? Thanks in advance!

Upvotes: 0

Views: 158

Answers (4)

zeantsoi
zeantsoi

Reputation: 26193

A combination of the foreach control structure and the % modulus operator will give you what you need:

foreach ($mount as $key => $m) {
    if ($key % 4 == 0) {
        $startClass = '<div with class>';
    } else {
        $startClass = '';
    }
    $ret.=''.$startClass.'<other HTML here and such>';
}

The foreach hash-rocket (=>) notation enables you to pass the index of the current element being iterated through. You can use the index to keep track of the nth-object.

The modulus operator returns the remainder from division; if the remainder is zero, the divisor is a factor of the dividend and thus can be used to calculate nth-factors.

Upvotes: 1

Dean
Dean

Reputation: 517

$i=0;

foreach($mount as $m)
{
    if (($i++ % 4) == 0)
    {

    }
}

Upvotes: 0

pwolaq
pwolaq

Reputation: 6381

what you are looking for is modulo operator

example:

if($i%4 == 0){$startClass='<div with class>';}

which means that i = k + 0, k being integer

Upvotes: 1

thescientist
thescientist

Reputation: 2948

Use the modulus operator http://www.php.net/manual/en/language.operators.arithmetic.php

if(($i % 4) === 0){
  //add class
}

Upvotes: 2

Related Questions