Отображение строк элементов HTML в вертикальных строках

Я хочу показать список категорий в моем виртуальном магазине Virtuemart вертикально отсортированным так же, как показано на этой демонстрации: http://www.inkplant.com/code/mysql-vertical-sort.php

Поэтому я позаимствовал код:

<?php $cols = 4; //number of columns, you can set this to any positive integer $values = array(); $result = mysql_query("SELECT * FROM states ORDER BY name"); $numrows = mysql_num_rows($result); $rows_per_col = ceil($numrows / $cols); for ($c=1;$c<=$cols;$c++) { $values['col_'.$c] = array(); } $c = 1; $r = 1; while ($row = mysql_fetch_assoc($result)) { $values['col_'.$c][$r] = stripslashes($row['name']); if ($r == $rows_per_col) { $c++; $r = 1; } else { $r++; } } echo "<table>" ; for ($r=1;$r<=$rows_per_col;$r++) { echo "<tr>" ; for ($c=1;$c<=$cols;$c++) { echo "<td>".$values['col_'.$c][$r]."</td>" ; } echo "</tr>" ; } echo "</table>" ; unset($values); ?> 

Затем я попытался изменить его в файле шаблона категории Virtuemart с этим результатом:

 <?php $cols = 3; //number of columns, you can set this to any positive integer $values = array(); $numrows = $precounterdigit; $rows_per_col = ceil($numrows / $cols); for ($c=1;$c<=$cols;$c++) { $values['col_'.$c] = array(); } $c = 1; $r = 1; foreach ( $this->category->children as $category ) { $catname = $category->category_name; $caturl = JRoute::_ ( 'index.php?option=com_virtuemart&view=category&virtuemart_category_id=' . $category->virtuemart_category_id ); $values['col_'.$c][$r] = '<div class="category floatleft'.$category_cellwidth.'"> <div class="spacer"><h2> <a href="'.$caturl.'" title="'.$catname.'"> '.$catname.'<br /></a></h2> </div></div>'; if ($r == $rows_per_col) { $c++; $r = 1; } else { $r++; } } echo '<div class="tablediv">' ; for ($r=1;$r<=$rows_per_col;$r++) { echo '<div class="row">' ; for ($c=1;$c<=$cols;$c++) { echo $values['col_'.$c][$r]; } echo '</div>' ; } echo '</div>' ; unset($values); ?> не <?php $cols = 3; //number of columns, you can set this to any positive integer $values = array(); $numrows = $precounterdigit; $rows_per_col = ceil($numrows / $cols); for ($c=1;$c<=$cols;$c++) { $values['col_'.$c] = array(); } $c = 1; $r = 1; foreach ( $this->category->children as $category ) { $catname = $category->category_name; $caturl = JRoute::_ ( 'index.php?option=com_virtuemart&view=category&virtuemart_category_id=' . $category->virtuemart_category_id ); $values['col_'.$c][$r] = '<div class="category floatleft'.$category_cellwidth.'"> <div class="spacer"><h2> <a href="'.$caturl.'" title="'.$catname.'"> '.$catname.'<br /></a></h2> </div></div>'; if ($r == $rows_per_col) { $c++; $r = 1; } else { $r++; } } echo '<div class="tablediv">' ; for ($r=1;$r<=$rows_per_col;$r++) { echo '<div class="row">' ; for ($c=1;$c<=$cols;$c++) { echo $values['col_'.$c][$r]; } echo '</div>' ; } echo '</div>' ; unset($values); ?> 

На самом деле он отлично отображается в представлении категории, если количество категорий делится на 3 или делится на 3 -1. Это означает, что он отображается правильно, если на странице есть категории 3, 5, 6, 8, 9, 11, 12 и т. Д. ….

Если количество категорий равно числу, которое делимо на 3 +1, то это показывает странным образом.

Вот пример того, как это показано, когда существует 9 категорий:

Cat1 | Cat4 | Cat7
Cat2 | Cat5 | Cat8
Cat3 | Cat6 | Cat9

Вот пример того, как это показано, когда есть 8 категорий:

Cat1 | Cat4 | Cat7
Cat2 | Cat5 | Cat8
Cat3 | Cat6 |

И вот пример того, как это показано, когда есть 7 категорий:

Cat1 | Cat4 | Cat7
Cat2 | Cat5 | Cat3
Cat6 |

Я действительно не могу понять этого, поэтому я надеюсь, что кто-то может мне немного помочь.

Просто попробуйте это, вы можете изменить cols и rows.

 <?php //user210424 $cols = 3; $rows = 3; $j = 0; $array = array("ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE"); for($i=1; $i<=$cols; $i++) { echo "<div class='col' style='float:left;'>"; for($j; $j<$rows*$i; $j++) { echo "<div class='row'>".$array[$j]."</div>"; } echo "</div>"; } ?>