Ered
Ered

Reputation: 497

php loop wrapping every 4 results with div and custom classes

I'm trying to add some custom classes based on the number of results of each wrapping block.

  1. Add the class last on the last of each wrapping block.
  2. Count the results of each wrapping block and depending on the results add a custom class, one-half one-third one-fourth

Here is the code:

<?php
$array = range(1, 11);

    $i= 0;
    foreach ($array as $val) {
        if ($i%4 == 0) echo '<div class="item">';
        $i++;
?>
    <span class="one-fourth"><?=$val?></span>
<?php       
        if ($i%4 == 0) echo '</div>';
    }
    if ($i%4 != 0) echo '</div>';
?>

Output I get:

<div class="item"> 
    <span class="one-fourth">1</span>
    <span class="one-fourth">2</span>
    <span class="one-fourth">3</span>
    <span class="one-fourth">4</span>
</div>
<div class="item"> 
    <span class="one-fourth">5</span>
    <span class="one-fourth">6</span>
    <span class="one-fourth">7</span>
    <span class="one-fourth">8</span>
</div>
<div class="item"> 
    <span class="one-fourth">9</span>
    <span class="one-fourth">10</span>
    <span class="one-fourth">11</span>
</div>

Output I want:

<div class="item"> 
    <span class="one-fourth">1</span>
    <span class="one-fourth">2</span>
    <span class="one-fourth">3</span>
    <span class="one-fourth last">4</span>
</div>
<div class="item"> 
    <span class="one-fourth">5</span>
    <span class="one-fourth">6</span>
    <span class="one-fourth">7</span>
    <span class="one-fourth last">8</span>
</div>
<div class="item"> 
    <span class="one-third">9</span>
    <span class="one-third">10</span>
    <span class="one-third last">11</span>
</div>

Upvotes: 0

Views: 433

Answers (1)

Nick
Nick

Reputation: 147166

This is probably most easily done by splitting the array into chunks and processing each chunk individually in a loop, using the count of the chunk to decide which class to add to the spans:

$array = range(1, 11);
$chunks = array_chunk($array, 4);

$span_classes = ['', 'one-half', 'one-third', 'one-fourth'];

foreach ($chunks as $chunk) {
    echo "<div class=\"item\">\n";
    $count = count($chunk);
    $span_class = $span_classes[$count-1];
    for ($i = 0; $i < $count; $i++) {
        $last = $i == $count - 1 ? ' last' : '';
        $val = $chunk[$i];
        echo "<span class=\"$span_class$last\">$val</span>\n";
    }
    echo "</div>\n";
}

Output:

<div class="item">
<span class="one-fourth">1</span>
<span class="one-fourth">2</span>
<span class="one-fourth">3</span>
<span class="one-fourth last">4</span>
</div>
<div class="item">
<span class="one-fourth">5</span>
<span class="one-fourth">6</span>
<span class="one-fourth">7</span>
<span class="one-fourth last">8</span>
</div>
<div class="item">
<span class="one-third">9</span>
<span class="one-third">10</span>
<span class="one-third last">11</span>
</div>

Demo on 3v4l.org

Upvotes: 2

Related Questions