ForEach loop: Output something different on every second result

13,979

You can create a "counting" variable, and then use the result of $count % 2 to determine if it is an odd or even row:

$rowCount = 0;
foreach ($wppost as $wp) {
  // stripping stuff:
  echo '<li';
  // increase $rowCount - if the remainder of a division by 2 is 1, echo extra class info:
  if ($rowCount++ % 2 == 1 ) echo ' class="even"';
  echo '><a href="'.$wp_posturl.'" title="'.$wp_title.'">'.$wp_title.'</a></li>';          
}


if(is_array($commenters)) {  
   $commentCount = 0;
   foreach ($commenters as $k) {
     ?><li<?php echo ($commentCount++%2==1)?' class="even"':''?>><?php
     //stripped the rest of the loop:
   }
}
Share:
13,979
Wade D Ouellet
Author by

Wade D Ouellet

Updated on June 04, 2022

Comments

  • Wade D Ouellet
    Wade D Ouellet almost 2 years

    I have two for each loops and I am trying to output something different for each second result:

    foreach ($wppost as $wp) {
                $wp_title = $wp->post_title;
                $wp_date = strtotime($wp->post_date);
                $wp_slug = $wp->post_name;
                $wp_id = $wp->ID;
                // Start Permalink Template
                $wp_showurl = $wp_url;
                $wp_showurl = str_replace("%year%", date('Y', $wp_date), $wp_showurl);
                $wp_showurl = str_replace("%monthnum%", date('m', $wp_date), $wp_showurl);
                $wp_showurl = str_replace("%day%", date('d', $wp_date), $wp_showurl);
                $wp_showurl = str_replace("%hour%", date('H', $wp_date), $wp_showurl);
                $wp_showurl = str_replace("%minute%", date('i', $wp_date), $wp_showurl);
                $wp_showurl = str_replace("%second%", date('s', $wp_date), $wp_showurl);
                $wp_showurl = str_replace("%postname%", $wp_slug, $wp_showurl);
                $wp_showurl = str_replace("%post_id%", $wp_id, $wp_showurl);
                // Stop Permalink Template
                $wp_posturl = $blog_address . $wp_showurl;
                echo '<li><a href="'.$wp_posturl.'" title="'.$wp_title.'">'.$wp_title.'</a></li>';          
            }
    

    For this one I want it to echo <li class="even"> instead of just <li> for each second result. I think this will have to be changed to a for loop to accomplished this but I am not sure how that is done without breaking it.

    Exact same for this one:

    if(is_array($commenters)) {
           foreach ($commenters as $k) {
             ?><li><?php
              if($ns_options["make_links"] == 1) {
                $url = ns_get_user_url($k->poster_id);
                if(trim($url) != '')
                {
                    echo "<a href='" . $url . "'>";
                }
              }
              if($ns_options["make_links"] == 2) {
                $url = ns_get_user_profile($k->poster_id);
                echo "<a href='" . $url . "'>";
              }
    
    
              $name = $bbdb->get_var("
           SELECT user_login 
           FROM $bbdb->users
           WHERE ID = $k->poster_id");
             echo ns_substr_ellipse($name, $ns_options["name_limit"]);
    
              if(trim($url) != '' && $ns_options["make_links"] == 1) {
                 echo "</a>";
              }
              if($ns_options["make_links"] == 2) {
                echo "</a>";
              }
              if ($ns_options["show_posts"] == 1)
              {
              echo " (" . $k->num_posts . ")\n";
              }
              echo $ns_options["end_html"] . "\n";
              unset($url);
           }
        } else {
          ?></li><?php
        }
    

    Thanks,

    Wade