我需要打印一个包含4列菜单项的数组,垂直排序,并填写如下:
这是要遵循的标记结构(5项)。
<ul>
<li>1</li>
<li>2</li>
</ul>
<ul>
<li>3</li>
</ul>
<ul>
<li>4</li>
</ul>
<ul>
<li>5</li>
</ul>
我正在尝试这样的事情,但这不起作用,因为它不会先填充行,如上例所示:
$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>";
对此有任何帮助表示赞赏!
答案 0 :(得分: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标记或其他任何内容。
编辑我修好了。它现在适用于任意数量的列和输入数据。我也把它变成了一个功能,所以它可以多次重复使用。
答案 1 :(得分:2)
<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>