2012-07-31 72 views
0

我想從逗號分隔的文本文件中存儲的名稱列表中創建一個5列html表格。從PHP中的文本文件創建一個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>"; 
?> 
+0

您需要關閉你的''標籤。 – Matt 2012-07-31 15:39:17

+0

等等。 – Matt 2012-07-31 15:39:44

+0

請把它作爲你的問題的編輯,而不是一個不可讀的評論。 – Matt 2012-07-31 16:24:44

回答

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(級聯樣式表)來設置它的樣式。

UPDATE:如果你想要做的顯示在列中的所有名字,只分離出<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>"; 

我的數學可能是關閉的,但您應該至少可以使用此代碼並對其進行調試。

+0

感謝您的回答。你的代碼比我的簡單得多,但已經達到了同樣的效果。是否可以擴展您的代碼以生成5列。該數組包含數百個名稱,因此需要多於1列 – 2012-07-31 15:46:47

+0

@GaryWaudby該表預計是否適合一個網頁的寬度?因爲如果你有數百列,那肯定不會。 – Matt 2012-07-31 15:56:49

+0

歡呼的幫助。使用您的幫助和建議添加上面的解決方案 – 2012-07-31 16:29:17

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; 
相關問題