从PHP数组生成HTML表

时间:2011-05-15 17:40:07

标签: php html

我不明白这一点。我需要解决看似简单的问题,但它超出了我的逻辑。我需要编写一个函数:table_columns($ input,$ cols),它将输出一个表(例子):

$input = array('apple', 'orange', 'monkey', 'potato', 'cheese', 'badger', 'turnip');
$cols = 2;

预期产出:

<table>
  <tr>
    <td>apple</td>
    <td>cheese</td>
  </tr>
  <tr>
    <td>orange</td>
    <td>badger</td>
  </tr>
  <tr>
    <td>monkey</td>
    <td>turnip</td>
  </tr>
  <tr>
    <td>potato</td>
    <td></td>
  </tr>
</table>

3 个答案:

答案 0 :(得分:6)

这样想。假设你有一系列这样的项目:

a, b, c, d, e, f, g, h, i, j, k

如果将列设置为2,则需要按以下顺序渲染:

a  g
b  h            0 6 1 7 2 8 3 9 4 10 5
c  i      --->  a g b h c i d j e  k f
d  j
e  k
f

有三列:

a  e  i
b  f  j        0 4 8 1 5 9 2 6 10 3 7
c  g  k   ---> a e i b f j c g  k d h
d  h

所以,粗略地说:

function cells ($input, $cols) {

  $num = count($input);
  $perColumn = ceil($num / $cols);

  for ($i = 0; $i < $perColumn; $i++) {

     echo "<tr>";

     for ($j = 0; $j < $cols; $j++) {
        // you'll need to put a check to see you haven't gone past the
        // end of the array here...

        echo "<td>" . $input[$j * $perColumn + $i] . "</td>";
     }
     echo "</tr>";
  }
}

答案 1 :(得分:4)

$input = array_chunk($input, $cols);
$html = '<table>';
foreach($input as $tr){
    html .= '<tr>';
    for($i = 0; $i < $cols; $i++) $html .= '<td>'.(isset($tr[$i]) ? $tr[$i] : '').'</td>';
    $html .= '</tr>';
}
$html .= '</table>';

答案 2 :(得分:-1)

尝试此功能:

function table_columns($input, $cols)
{
    int $i = 0;
    echo "<table><tr>";
    foreach ( $input as $cell )
    {
        echo "<td>".$cell."</td>";
        $i++;
        if($i == $cols)
        {
            $i = 0;
            echo "</tr><tr>";
        }
    }
    echo "</tr></table>";
}

我希望它能解决你的问题。

[编辑:修正错误,匆忙]