PHP while()包装项目

I have this html code:

<div class="row elem2">
  <div class="item"></div>
  <div class="item"></div>
</div>
<div class="row elem4">
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
</div>
<div class="row elem3">
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
</div>

and I am looking for a way to implement it in my php while (wordpress). The while is as

while ( have_posts() ) : the_post();
   echo '<div class="item"></div>';
endwhile;

I've tried a lot of stuff, but none have worked. I need to divide every 2 items and put them in a wrap <div class="row elem2"> after that the next 4 items in <div class="row elem4"> and after that the next 3 items in <div class="row elem3">

I did a lot of searching, but I am not even sure what to search for.

A little crude but here's one solution

$i = 0; // Number of items made so far in the row
$mode = 0; // Current row type enumerated by $elem
$elem = array(2,4,3); // Enumeration of the desired row sizes
while ( have_posts() ) : the_post();
    // Make a new row when there's no items yet
    if ($i == 0) echo '<div class="row elem'. $elem[$mode] .'">';
    echo '<div class="item"></div>';
    $i++;
    // Once the items in the current row has reached the row's maximum size
    if ($i % $elem[$mode] == 0):
        echo '</div>'; 
        $i = 0; // Reset items made for the row back to 0
        $mode = ($mode + 1) % 3; // Increment mode and wrap if necessary
    endif;
endwhile;
if ($i > 0) echo '</div>'; // Finish the last row if it wasn't finished

This is what the modulos was built for!