我正在尝试从存储在文本文件中的逗号分隔的名称列表中创建一个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> </td>"; $tdcount++;
} print "</tr>";
}
print "</table>";
?>
答案 0 :(得分:2)
使用fgetcsv()
将CSV文件打印为HTML表格,无论其包含多少列:
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;
答案 1 :(得分:1)
如果$arrM
包含从以逗号分隔的数据字符串执行的explode()
派生的数组,那么您需要做的就是foreach()
上的$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> </td>";
}
echo "</table>";
我的数学可能不在此,但你应该能够至少使用这段代码并进行调试。