Search code examples
phptwitter-bootstrapwhile-loopscaffolding

scaffolding for bootstrap columns in php while loops


I'm trying to present my sql rows in bootstrap grid dynamically

<div class="row>
  <div class="col-md-3">sql row 1</div>
  <div class="col-md-3">sql row 2</div>
  <div class="col-md-3">sql row 3</div>
  <div class="col-md-3">sql row 4</div>
</div> 
<div class="row>
  <div class="col-md-3">sql row 5</div>
  <div class="col-md-3">sql row 6</div>
  <div class="col-md-3">sql row 7</div>
  <div class="col-md-3">sql row 8</div>
</div>  

and I'm having trouble how to set up the while loop. what I have now just does

<div class="row>
  <div class="col-md-3">sql row 1</div>
  <div class="col-md-3">sql row 2</div>
  <div class="col-md-3">sql row 3</div>
  <div class="col-md-3">sql row 4</div>
  <div class="col-md-3">sql row 5</div>
  <div class="col-md-3">sql row 6</div>
  <div class="col-md-3">sql row 7</div>
  <div class="col-md-3">sql row 8</div>
</div>

how can I set up loop to assign four col-md-3 classes to each row automatically and then continue. Current code:

<div class="row">
   while($row = $result->fetch_assoc()) 
{
    $spons_amt = round($row["spons_amt"] + 500, 2);
echo '<div class="col-md-3">' . $spons_amt . '</div>'
} 
mysqli_close($conn);
</div> 

I'm guessing what I need to do is

    <div class="row">
   while($row = $result->fetch_assoc())
// count number of rows 
{
//list 4 of these (to make a row)
    $spons_amt = round($row["spons_amt"] + 500, 2);
echo '<div class="col-md-3">' . $spons_amt . '</div>'
} 
// echo </div><div class="row"> between every set of 4
mysqli_close($conn);
</div> 

Am I going about this the right way? How could I complete the code?


Solution

  • The most elegant solution is to use PHP's array_chunk function:

     foreach(array_chunk($entries, 4) as $entriesRow) {
         echo '<div class="row">';
             foreach ($entriesRow as $entry) {
                 echo "<div class='col-md-3'>$entry</div>";
             }
         echo '</div>';
     }
    

    (Assuming that you have fetched all DB rows in $entries array.)