PHP:将单个数组输出为多个列表

时间:2015-02-18 08:39:06

标签: php html arrays

我有一个未知长度的数组:

$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; ?>

7 个答案:

答案 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>';
}

Sample Output

答案 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; ?>