0

カンマ区切りのテキストファイルに保存されている名前のリストから5列のhtmlテーブルを作成しようとしています。

私はここまで到達しましたが、有能なコーダーからはほど遠いので、助けが必要です。現時点では、1つの長い列にテーブルが表示されています。

<?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れた配列が含まれている場合は、 onを実行するだけですexplode()foreach()$arrM

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

もちろん、これは、1 つの列と複数の行を含む垂直テーブルを作成する場合です。ただし、これが達成しようとしているものである場合、テーブルというよりリストのように聞こえます。その場合、これを試すことができます:

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 に答える