1

I want to add 3 divs in a row through a loop in PHP. For example:

<div class="container">
   <div class="row">
      <div class="col-md-4"> Item 1 </div>
      <div class="col-md-4"> Item 2 </div>
      <div class="col-md-4"> Item 3 </div>
   </div>
   <div class="row">
      <div class="col-md-4"> Item 4 </div>
      <div class="col-md-4"> Item 5 </div>
      <div class="col-md-4"> Item 6 </div>
   </div>
</div>

I did a few searches on Stackoverflow but I didn't find a good solution. Who can help me? This is my PHP code so far, but as you see, it place only 1 item in a row

for($i = 0; $i < $limit; $i++) {
   if ($i % 3 == 0) {
      $content .= "<div class='row'>";
   }

   $content.= "<div class='col-md-4 col-sm-6'>Item ". $i ."</div></div>";

   if ($i % 3 == 0) {
     $content .= "</div>";
   }
}
3
  • 2
    Why one extra closing div in $content.= "<div class='col-md-4 col-sm-6'>Item ". $i ."</div></div>"; ?? Commented Nov 30, 2016 at 18:57
  • I suggest, your code wrap every third row, instead of block of three rows ) Commented Nov 30, 2016 at 21:37
  • because I copied to much code ;) Originally I have other content in the div ;) Commented Nov 30, 2016 at 22:13

2 Answers 2

3

You can use nested foreach loops instead if you put your numbers into a multidimensional array.

foreach (array_chunk(range(1, $limit), 3) as $row) {
    $content .= "<div class='row'>";
    foreach ($row as $i) {
        $content .= "<div class='col-md-4 col-sm-6'>Item ". $i ."</div>";
    }
    $content .= "</div>";
}

array_chunk(range(1, $limit), 3) will produce an array like [[1, 2, 3], [4, 5, 6]]. This will use slightly more memory, but I prefer the simpler code.

Sign up to request clarification or add additional context in comments.

2 Comments

@RiggsFolly I was referring to the additional dimension created by array_chunk
Oh sorry I didnt get that :)
1

This will do it and cope with odd numbers in $limit

$limit = 9;
$content = '';
for($i = 0; $i < $limit; $i++) {
    if ($i % 3 == 0) {
        $content .= "\n<div class='row'>";
    }
    // remove the extra `</div>` from this line
    //$content.= "<div class='col-md-4 col-sm-6'>Item ". $i ."</div></div>";

    $content.= "\n\t<div class='col-md-4 col-sm-6'>Item$i</div>";

    if ($i % 3 == 2) {
        $content .= "\n</div>";
    }
}
//cope with odd numbers in $limit
if ( $i%3 != 0) {
    $content .= "\n</div>";
}
echo $content;

Result:

<div class='row'>
    <div class='col-md-4 col-sm-6'>Item0</div>
    <div class='col-md-4 col-sm-6'>Item1</div>
    <div class='col-md-4 col-sm-6'>Item2</div>
</div>
<div class='row'>
    <div class='col-md-4 col-sm-6'>Item3</div>
    <div class='col-md-4 col-sm-6'>Item4</div>
    <div class='col-md-4 col-sm-6'>Item5</div>
</div>
<div class='row'>
    <div class='col-md-4 col-sm-6'>Item6</div>
    <div class='col-md-4 col-sm-6'>Item7</div>
    <div class='col-md-4 col-sm-6'>Item8</div>
</div>

Or with $limit set to an odd number like 5

<div class='row'>
    <div class='col-md-4 col-sm-6'>Item 1</div>
    <div class='col-md-4 col-sm-6'>Item 2</div>
    <div class='col-md-4 col-sm-6'>Item 3</div>
</div>
<div class='row'>
    <div class='col-md-4 col-sm-6'>Item 4</div>
    <div class='col-md-4 col-sm-6'>Item 5</div>
</div>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.