0

我正在尝试从以逗号分隔的文本文件中存储的名称列表创建一个 5 列的 html 表。

我已经做到了这一点,但我离一个称职的编码员还很远,需要一些帮助。目前它在一长列中显示表格。

<?php
$f = fopen("names.txt", "r");
while (!feof($f)) { 
$arrM = explode(",",fgets($f));   

$val = current  ( $arrM )  ;
print "<table border=1>";
while ( $val )
    {
      print "<tr> <td> $val </td> ";
      $val = next ( $arrM) ;
      print "<td> $val </td> </tr> ";
      print "\n";
      $val = next ( $arrM );
    }

print "</table>";
}
    ?>

首先十分感谢

已解决...这是任何寻求相同帮助的 Google 员工的代码...

<?php 
    $tdcount = 1; $numtd = 3; // number of cells per row 
    print "<table>"; 
    $f = fopen("names.txt", "r"); 
    while (!feof($f)) { 
        $arrM = explode(",",fgets($f)); 
        $row = current ( $arrM ); 
        if ($tdcount == 1) 
            print "<tr>"; print "<td>$row </td>"; 
        if ($tdcount == $numtd) { 
            print "</tr>"; 
            $tdcount = 1; 
        } else { 
            $tdcount++; 
        } 
    } 
    if ($tdcount!= 1) { 
        while ($tdcount <= $numtd) { 
            print "<td>&nbsp;</td>"; $tdcount++; 
        } print "</tr>"; 
    } 
    print "</table>"; 
?>
4

2 回答 2

2

将 CSV 文件打印为 HTML 表格,无论它有多少列,使用fgetcsv()

if( ($handle = fopen( 'test.csv', 'r' )) !== false )
{
    $output = '<table>';
    while( ($data = fgetcsv( $handle )) !== false )
    {
        $output .= '<tr>';
        foreach( $data as $value )
        {
            $output .= sprintf( '<td>%s</td>', $value );
        }
        $output .= '</tr>';
    }
    fclose( $handle );
    $output .= '</table>';
}
echo $output;
于 2012-07-31T16:37:54.227 回答
1

如果$arrM包含从对逗号分隔的数据字符串执行的数组派生的数组,则explode()您所要做的就是一个foreach()on$arrM

echo "<table border='1'>";
foreach ($arrM as $val) {
    echo "<tr><td>" . $val . "</td></tr>";
}
echo "</table>";

当然,这是如果您想创建一个包含一列和多行的垂直表。但是,如果这是您想要完成的,它听起来更像是一个列表而不是一个表格。在这种情况下,你可以试试这个:

echo "<ul>";
foreach ($arrM as $val) {
    echo "<li>" . $val . "</li>";
}
echo "</ul>";

然后,您可以使用 CSS(级联样式表)对其进行样式设置。

更新:如果您想在列中显示所有名称,只需将<tr>标签分开:

echo "<table border='1'><tr>";
foreach($arrM as $val) {
    echo "<td>" . $val . "</td>";
}
echo "</tr></table>";

相反,如果您只想要 x 列,还有一种方法可以做到这一点:

$maxCols = 10;
$counter = 0;

echo "<table border='1'>";
foreach ($arrM as $val) {
    $newRow = ($counter++ % $maxCols == 0);
    if ($newRow) {
        echo "<tr>";
    }
    echo "<td>" . $val . "</td>";
    if ($newRow) {
        echo "</tr>";
    }
}
// fill out the rest of the table
$remainingCols = $maxCols - (count($arrM) % $maxCols);
for ($i = 0; $i < $remainingCols; $i++) {
    echo "<td>&nbsp;</td>";
}
echo "</table>";

我的数学可能与此有关,但您至少应该能够使用此代码并对其进行调试。

于 2012-07-31T15:41:19.073 回答