我有一个未知长度的数组:
$array = array('1', '2', '3', '4', '5', '6', '7', '8' ...);
我需要将此数组作为多个列表输出,其中为每3个数组条目创建一个新列表。
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<ul>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
<ul>
<li>7</li>
<li>8</li>
</ul>
请注意,即使它不包含3个列表项,我也需要关闭最后一个列表。
这是我的尝试:
<?php for ($i = 0; $i < count($rows); ++$i): ?>
<?php if (($i % 3) == 0): ?>
<ul>
<?php endif; ?>
<li><?php print $rows[$i]; ?></li>
<?php if (($i % 3) == 2): ?>
</ul>
<?php endif; ?>
<?php endfor; ?>
答案 0 :(得分:5)
您可以使用array_chunk
执行此任务。把他们砸成三个人:
$array = range(1, 8);
$unknown_length = array_chunk($array, 3); // cut by batches of three
foreach($unknown_length as $ul) {
echo '<ul>';
foreach($ul as $li) {
echo "<li>$li</li>";
}
echo '</ul>';
}
答案 1 :(得分:3)
这应该适合你:
(这里我用3 array_chunk()
将数组分成3块。然后我用foreach循环遍历每个innerArray并用implode()
打印列表
<?php
$array = array('1', '2', '3', '4', '5', '6', '7', '8');
foreach(array_chunk($array, 3) as $chunk)
echo "<ul><li>" . implode('</li><li>', $chunk) . "</li></ul>";
?>
答案 2 :(得分:1)
尝试使用foreach循环
$array = array('1', '2', '3', '4', '5', '6', '7', '8');
$i=1;
foreach($array as $a) {
if($i == 1) echo '<ul>';
echo '<li>'.$a.'</li>';
if($i % 3 == 0) {
echo '</ul>';
echo '<ul>';
}
if($i == count($array))
echo '</ul>';
$i++;
}
输出: -
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<ul>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
<ul>
<li>7</li>
<li>8</li>
</ul>
答案 3 :(得分:1)
$i = 1;
foreach($array as $value){
switch($i){
case 1:
echo '<ul>'
. '<li>' . $value . '</li>';
break;
case 2:
echo '<li>' . $value . '</li>';
break;
case 3:
echo '<li>' . $value . '</li>'
. '</ul>';
$i = 0;
break;
}
$i++;
}
答案 4 :(得分:0)
$array = array('1', '2', '3', '4', '5', '6', '7', '8');
echo "<ul>";
foreach($array as $key => $val){
echo "<li>$val</li>";
if(($key+1)%3 == 0){
echo "</ul><ul>";
}
}
echo "</ul>";
<强> Demo 强>
答案 5 :(得分:0)
$array = array('1', '2', '3', '4', '5', '6', '7', '8');
$n = count($array);
$i=1;
$list = '';
foreach ($array as $val) {
if($i==1){
$list .='<ul>';
}
$list .='<li>'.$val.'</li>';
if($i%3==0){
$list .='</ul>';
$list .='<ul>';
}
if($n==$i){ $list .='</ul>'; }
$i++;
}
echo $list;
答案 6 :(得分:0)
为什么不在HTML中使用类似模板的替代循环语法? (当然,如果你正在使用某种“观点”)
<? for ($i=0; $i<count($a); $i+=3): ?>
<ul>
<? for ($j=$i; $j<min(count($a), $i+3); $j++): ?>
<li><? echo $a[$j]; ?></li>
<? endfor; ?>
</ul>
<? endfor; ?>