2012-11-17 69 views
2

我需要打印与菜单项阵列,4列,竖向排序,并填写像这样:打印数组排序的垂直

enter image description here

这里的标记结构跟随(5个项目)。

<ul> 
    <li>1</li> 
    <li>2</li> 
</ul> 
<ul> 
    <li>3</li> 
</ul> 
<ul> 
    <li>4</li> 
</ul> 
<ul> 
    <li>5</li> 
</ul> 

我beeing尝试这样的事情,但是,这并不工作,因为它不填写行第一,正如上面的例子表明:

$cols = 4; 
$cnt = count($items); 

echo "<ul>"; 
foreach($items as $i => $item) { 
    echo "<li>" . $item->ID . "</li>"; 
    if(($i + 1)%$cols == 0 && ($i + 1) != $cnt) { 
     echo "</ul>\n<ul>"; 
    } 
} 
echo "</ul>"; 

任何帮助表示赞赏!

回答

3

像这样的东西应该做你想做的伎俩。只需输入一个数据阵列和列数所希望的,这将是阵列分成列

<?php 
    $items = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17); 
    $numCols = 4; 
    $result = ListArrayVals($items,$numCols); 
    echo $result; 
    function ListArrayVals($items,$numCols) { 
     $minPerRow = floor(count($items)/$numCols); 
     $remaining = count($items) % $numCols; 
     $colCount = array(); 
     for ($i = 0;$i<$numCols;$i++) { 
      if ($i < $remaining) { 
       array_push($colCount,$minPerRow+1); 
      } else { 
       array_push($colCount,$minPerRow); 
      } 
     } 
     $listString = ''; 
     $count = 0; 
     for ($i = 0;$i<count($colCount);$i++) { 
      $listString = $listString . "<ul>"; 
      for ($j = 0;$j<$colCount[$i];$j++) { 
       $listString = $listString . '<li>' . $items[$count] . '</li>'; 
       $count = $count + 1; 
      } 
      $listString = $listString . '</ul>'; 
     } 
     return $listString; 
    } 
?> 

指定数量只是简单地改变echo语句来包装任何你想要它周围的HTML标签或。

编辑我修好了。它现在可以用于任意数量的列和输入数据。我也把它变成了一个功能,所以它可以重复使用很多次。

+0

有你'$测试了数numCols = 4;'作为其问题时指定的OP? – Havelock

+1

不适用于四列。为什么你在$ items数组中缺少索引? – frigg

+0

它对我来说工作得很好4.我只是测试它,我不知道你的意思是缺少索引。 – MZimmerman6

1

尝试css3 multi column property

<style> 
.menu { 
    -moz-column-count:4; /* Firefox */ 
    -webkit-column-count:4; /* Safari and Chrome */ 
    column-count:4; 
} 
</style> 

<ul class="menu"> 
    <li>1</li> 
    <li>2</li> 
    <li>3</li> 
    <li>4</li> 
    <li>5</li> 
    <li>6</li> 
    <li>7</li> 
</ul> 
+0

很好的解决方案。这是否适用于IE8? – frigg

+0

其实它不支持任何IE版本 – vlcekmi3