PHP For each - every two

Hi Experts,

I have this php code:

    <?php

$catTerms = get_terms('product_cat', array('hide_empty' => 0, 'orderby' => 'ASC', 'parent'=> 28)); ?>

<?php foreach($catTerms as $catTerm) : ?>

       <td><a href="/product-category/<?php echo $catTerm->slug; ?>"><?php echo $catTerm->name; ?></a></td>

<?php endforeach; ?>     

Open in new window


I need it to output two <td> every one <tr> like this

<tr>
        <td></td>
        <td></td>
      </tr>

Open in new window


I cant seem to get a solution - please help!

Many thanks in advance
maccaj51Asked:
Who is Participating?
 
gr8gonzoConnect With a Mentor ConsultantCommented:
This is the approach I typically use. It lets me easily change the # of columns per row later if I ever need to (just change $columnsPerRow to the desired number) and the code is very readable.

<?php
$catTerms = get_terms('product_cat', array('hide_empty' => 0, 'orderby' => 'ASC', 'parent'=> 28)); ?>
$currentColumn = 0;
$columnsPerRow = 2;

<tr>
<?php foreach($catTerms as $catTerm) : ?>
       $currentColumn++;
       <td><a href="/product-category/<?php echo $catTerm->slug; ?>"><?php echo $catTerm->name; ?></a></td>
        <?php 
        // Start a new row every $columnsPerRow
        if(($currentColumn % $columnsPerRow) == 0)
        {
          echo "</tr><tr>";
        }
        ?>
<?php endforeach; ?>  
</tr>

Open in new window

0
 
honestman31Commented:
is it what u want or am i missing something

<?php

$catTerms = get_terms('product_cat', array('hide_empty' => 0, 'orderby' => 'ASC', 'parent'=> 28)); ?>

<?php foreach($catTerms as $catTerm) : ?>

       <td><a href="/product-category/<?php echo $catTerm->slug; ?>"><?php echo $catTerm->name; ?></a></td>

  <td><a href="/product-category/<?php echo $catTerm->slug; ?>"><?php echo $catTerm->name; ?></a></td>


<?php endforeach; ?>  

Open in new window

0
 
Jagadishwor DulalBraces MediaCommented:
What will be your output?? Not just <tr><td></td><td></td></tr> I am talking about content?
0
The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

 
maccaj51Author Commented:
I havent explained myself very well... This just outputs the same array value side by side.

I want to loop through the whole array putting every two values into a row...
0
 
honestman31Commented:
also u can replace  line #9  in my code above   with just   <td></td>
0
 
maccaj51Author Commented:
the output should be...
<tr>
        <td><a href="/product-category/value1">Value1</a></td>
        <td><a href="/product-category/value2">Value2</a></td>
      </tr>
      <tr>
       <td><a href="/product-category/value3">Value3</a></td>
        <td><a href="/product-category/value4">Value4</a></td>
      </tr>

Open in new window

0
 
Kim WalkerWeb Programmer/TechnicianCommented:
If you're looking to place the results in two columns, you'd be better off with a for loop.
<?php

$catTerms = get_terms('product_cat', array('hide_empty' => 0, 'orderby' => 'ASC', 'parent'=> 28)); ?>

<?php for($i = 0; $i < count($catTerms); $i += 2) : ?>

       <tr><td><a href="/product-category/<?php echo $catTerms[i]->slug; ?>"><?php echo $catTerm->name; ?></a></td>

       <td><a href="/product-category/<?php echo $catTerms[i+1]->slug; ?>"><?php echo $catTerm->name; ?></a></td></tr>

<?php endfor; ?>

Open in new window


However, this will only work if you have an even number of items. If you have or may have an odd number, you'd need to use an if statement for the second <td>.
<?php

$catTerms = get_terms('product_cat', array('hide_empty' => 0, 'orderby' => 'ASC', 'parent'=> 28)); ?>

<?php for($i = 0; $i < count($catTerms); $i += 2) : ?>

       <tr><td><a href="/product-category/<?php echo $catTerms[i]->slug; ?>"><?php echo $catTerm->name; ?></a></td>

<?php if ($i + 1 < count($catTerms) ) { ?>
       <td><a href="/product-category/<?php echo $catTerms[i+1]->slug; ?>"><?php echo $catTerm->name; ?></a></td>

<?php } ?>

       </tr>

<?php endfor; ?>

Open in new window

0
 
honestman31Commented:
Now I got what you want , please trythis  code and let me know
try this
   <?php

$catTerms = get_terms('product_cat', array('hide_empty' => 0, 'orderby' => 'ASC', 'parent'=> 28)); ?>
$counter = 0; 
<?php 
foreach($catTerms as $catTerm) :
if ( $counter/2 == intval  ( $counter/2 )  )  echo "<tr>" ;
 ?>



       <td><a href="/product-category/<?php echo $catTerm->slug; ?>"><?php echo $catTerm->name; ?></a></td>

<?php 
if ( $counter/2 == intval  ( $counter/2 )  )  echo "</tr>";
$counter++;
endforeach; 
?>  

Open in new window

0
 
gr8gonzoConsultantCommented:
@honestman31: Use the % operator. It's a much cleaner and more efficient way to do exactly what you're doing:

Multiple math operations and intval() casting:
if( $counter/2 == intval($counter/2) )

One math operation:
if( ($counter % 2) == 0)

Or for even shorter syntax:
if(!($counter % 2))
0
 
maccaj51Author Commented:
Many thanks for everyones help
0
All Courses

From novice to tech pro — start learning today.