我目前有一个列表(< ul>),我已将其分为两列。但在完成代码之后,我想知道是否有更有效或更干净的方法来做同样的事情。
echo "<table class='area_list'><tr>";
// Loop users within areas, divided up in 2 columns
$count = count($areaArray);
for($i=0 ; $i<$count ; $i++) {
$uid = $areaArray[$i];
// get the modulus value + ceil for uneven numbers
$rowCalc = ($i+1) % ceil($count/2);
if ($rowCalc == 1) echo "<td><ul>";
// OUTPUT the actual list item
echo "<li>{$users[$uid]->profile_lastname}</li>";
if ($rowCalc == 0 && $i!=0) echo "</ul></td>";
}
echo "</tr></table>";
答案 0 :(得分:4)
不知道这是否是@llia的意思,但是像这样的for循环怎么样:
//declare how many columns are needed
$cols=2;
//iterate over each row of entries (down the column)
for ($i=0;i<$count;i+=cols){
echo "<td><ul>";
//entry loop (across the row)
for($j=0;j<$cols;j++){
//whose line is it anyway?
$uid = $areaArray[$i+$j];
echo "<li>{$users[$uid]->profile_lastname}</li>";
}
//end entry loop
echo "</ul></td>";
}
//end row loop
这样,你可以设置很多你喜欢的列。
原谅我,如果我错过了什么,因为我正在等待水壶煮沸以获得我急需的咖啡因!
答案 1 :(得分:1)
您可以循环两次,每列一次。从第一列的0开始,在第二列的1开始。增加两倍。
编辑:为了使它更好,将列本身放在循环中:
$cols = 3;
echo '<table><tr>';
// column loop
for ($c = 1; $c <= $cols; $c++) {
echo '<td><ul>';
// item loop
for ($i = 0; $i < count($areaArray); $i += $c) {
echo '<li>...</li>';
}
echo '</ul></td>';
}
echo '</tr></table>';
答案 2 :(得分:1)
这应该做你想要的。我几乎只是结合了其他两个答案,所以每个人都有+1。
$cols=3;
$user_count = count($users);
echo "<table class='area_list'><tr>";
// Column loop
for($i=0;$i<$cols;$i++){
echo "<td><ul>";
// user loop
for($j=$i;$j<$user_count;$j+=$cols){
echo "<li>{$users[$j]->profile_lastname}</li>";
}
echo "</ul></td>";
}
echo "</tr></table>";
答案 3 :(得分:1)
$cols = 3;
$chunkSize = ceil(count($areaArray) / $cols);
echo $chunkSize * $cols;
foreach (array_chunk($areaArray, $chunkSize) as $items) : ?>
<td>
<ul>
<?php foreach ($items as $item) : ?>
<li><?php echo $item ?></li>
<?php endforeach; ?>
</ul>
</td>
<?php endforeach; ?>