2009-08-11 9 views
1

を使用してCSVファイルから複数列の表を作成します。私はテーブルのセルを垂直方向にリストしたいと思います。私は名前のCSVファイルを持っている場合たとえば、私は2列を必要とすると仮定すると、私はPHPを使用してCSVファイルから複数列の表を作成しようとしているPHP

bill 
mike 
sarah 
steve 
kim 
dave 

は、私はこのように縦に一覧表示するには、テーブルをしたいと思います:

bill steve  
mike kim 
sarah dave 

私はテーブルを望んでいませんこのように、水平に一覧表示します

bill mike  
sarah steve 
kim dave 

私は選手名、チーム名のCSVファイルから1つの列のテーブルを作るために、次のコードを使用している - と私はまた、チームの位置属性に渡されました。列を垂直に3列に分割したいと考えています。コードは次のとおりです。

<?PHP 

$file_handle = fopen("CSV Team Example.csv", "r"); 

echo "<table border = '0' cellspacing='1' cellpadding='3'>\n"; 

while (!feof($file_handle)) { 

$line_of_text = fgetcsv($file_handle); 

echo "<tr>\n<td width = '200' position = '" . $line_of_text[2] . "'>". $line_of_text[0]. " <br> &nbsp;" . $line_of_text[1] . "</td>\n</tr>\n"; 

} 

fclose($file_handle); 

echo "</table>"; 

?> 

ここには私が働いているCSVファイルがあります。あなたの検討のために非常に事前にありがとうございます。

CSVファイル:

Scott L. Aranda,Red Devils,Offense 
Todd D. Smith,Blue Streaks,Offense 
Edward M. Grass,Red Devils,Defense 
Aaron G. Frantz,Blue Streaks,Defense 
Ryan V. Turner,Red Devils,Offense 
Belinda J. Bridges,Red Devils,Defense 
Raymond P. Webb,Blue Streaks,Offense 
Allison M. Elwell,Blue Streaks,Defense 
Melinda B. Savino,Blue Streaks,Offense 
Wendy R. Lane,Red Devils,Offense 
Gordon Q. Farmer,Blue Streaks,Defense 
William F. Lawrence,Red Devils,Offense 
Christa L. Limones,Blue Streaks,Offense 
Sandra C. Singleton,Red Devils,Offense 
Keshia M. Garcia,Blue Streaks,Defense 
Margaret A. Arnold,Red Devils,Defense 
Paul S. Gonzalez,Blue Streaks,Offense 
Mark V. Stocks,Red Devils,Defense 
Elizabeth J. Quinn,Red Devils,Offense 
Rusty M. Collette,Red Devils,Offense 
Myra L. Armstrong,Blue Streaks,Defense 
William B. Stewart,Blue Streaks,Defense 
Erin J. Hoch,Red Devils,Defense 
Robin S. Meredith,Blue Streaks,Offense 
Sherie D. Lee,Red Devils,Offense 
Michael A. Whitney,Blue Streaks,Defense 
Louis R. Ochoa,Red Devils,Defense 
Paul R. Garcia,Blue Streaks,Offense 
Chester A. Bailey,Red Devils,Defense 
Johnny B. Coover,Red Devils,Defense 
Emily K. Wright,Red Devils,Offense 
Perry D. Desmarais,Red Devils,Offense 
Judie J. Burns,Blue Streaks,Defense 
Martin L. Dunn,Blue Streaks,Defense 
Stephanie C. Rose,Blue Streaks,Defense 
Don T. Grimes,Blue Streaks,Offense 
Robert C. Devito,Blue Streaks,Offense 
Michael J. Taylor,Red Devils,Defense 
Melissa D. Bush,Red Devils,Offense 

答えて

1

からそれぞれの項目の配列にファイル全体を読んで最初の、そして、(Xは、あなたがしたい列の数である)Xの部分に配列を分割して、出力1つのアイテム行の一部を各行ごとに繰り返します。

あなたが列2の最初の項目がするまでになるのか分からないので、あなたはそれを破るしようとしている方法では動作しませんファイルから読み込むのと同じループ内に出力のあなたの現在のアプローチあなたはすべてのアイテムを見たことがあります。

0

申し訳ありませんが、私は質問を誤解しました。

$csv = 'bill,mike,sarah,steve,kim,dave'; 
$csv = str_getcsv(implode(',', explode("\n", trim($csv))), ',', ''); 
$columns = 2; 

echo '<table border="1" cellspacing="1" cellpadding="3">'; 

for ($i = 0; $i < count($csv)/$columns; $i++) 
{ 
    echo '<tr>'; 

    for ($j = 0; $j < $columns; $j++) 
    { 
     echo '<td width="200">' . $csv[$i + ($j * ($columns + 1))] . '</td>'; 
    } 

    echo '</tr>'; 
} 

echo '</table>'; 

戻り値:

bill steve 
mike kim 
sarah dave 
0

は、PHPでのmod演算子を使用して分割し、配列のコピーを回避することができ、次の擬似コードを参照してください。

編集:$ NUMCOLS変数を初期化するために忘れました!

echo '<table>'; 
$f = file('..'); 
$numcols = 2; 
for($i=0;$i<count($f);$i++) 
{ 
$data = str_getcsv($f[$i]); 
if($i % $numcols == 0) echo '<tr>'; 

// cell diplay here.. 
echo '<td>' . $data[???] . '</td>'; 

if($i+1 < count($f) && ($i+1 % $numcols) == 0) echo '</tr>'; 
} 

echo '</table>'; 

の任意の数やその変化のために働く必要があります。

0

はあなたの助けのためにありがとうございました。私はDavが上で示唆したように配列を作成することによって、これを実現することができました。コードは少し醜いですが、それは仕事をしていません - 私はかなりPHPの初心者だと私は、私はウェブ上で発見例から一緒にこれを置きます。

最後に、explode関数を使用してCSVファイルをカンマに基づいて区切ります。私のフィールドの1つに住所などのコンマが複数ある場合、これはうまくいきません:123 elm street、bethesda、maryland 20816。私は配列を作成するときにfgetcsvを使いたいと思いますが、わかりませんどうやってするの。誰かが私を助けることができますか?

また、str_getcsvは私のホスティングサービス上のphpのバージョンでサポートされていないようですので、私にとってはうまくいきません。

これまで私が使用していたコードは次のとおりです。これは私の単純なCSVファイルに基づいた完璧な結果です。

コード:

<?PHP 
// set the number of columns you want 
$columns = 4; 

// count up number of lines in your CSV file 
$file_handle = fopen("CSV Team Example.csv", "r"); 
$row = 0; 
while (!feof($file_handle)) { 
$line_of_text = fgetcsv($file_handle, 1024); 
$row++; 
} 
$number_of_rows = $row; 
fclose($file_handle); 

// calculate number of rows per column 
$rows_per_column = ceil($number_of_rows/$columns); 

// create your array 
$lines =file('CSV Team Example.csv'); 

foreach($lines as $data) 
{ 
list($name[],$team[],$team_position[]) 
= explode(',',$data); 
} 

// make your table 
echo "<TABLE BORDER=\"0\">\n"; 

//here we changed the condition to $i < $rows_per_column 
for($i = 0; $i < $rows_per_column; $i++) { 

    echo "<TR>\n"; 

    //here will run another loop for the amount of columns 
    for($j = 0; $j < $columns; $j++) { 
     echo "<td width = '200' position = '" . $team_position[$i + ($j * $rows_per_column)] . "'>". $name[$i + ($j * $rows_per_column)] . " <br> &nbsp;" . $team [$i + ($j * $rows_per_column)] . "</td>\n"; 
     } 
    echo "</TR>\n"; 
} 
echo "</TABLE>\n"; 
?> 

ここに私のCSVファイルです:CSVチームExample.csvが。最初の列はプレイヤー名、2列目はチーム名、3列目はプレイ位置です。

Scott L. Aranda,Red Devils,Offense 
Todd D. Smith,Blue Streaks,Offense 
Edward M. Grass,Red Devils,Defense 
Aaron G. Frantz,Blue Streaks,Defense 
Ryan V. Turner,Red Devils,Offense 
Belinda J. Bridges,Red Devils,Defense 
Raymond P. Webb,Blue Streaks,Offense 
Allison M. Elwell,Blue Streaks,Defense 
Melinda B. Savino,Blue Streaks,Offense 
Wendy R. Lane,Red Devils,Offense 
Gordon Q. Farmer,Blue Streaks,Defense 
William F. Lawrence,Red Devils,Offense 
Christa L. Limones,Blue Streaks,Offense 
Sandra C. Singleton,Red Devils,Offense 
Keshia M. Garcia,Blue Streaks,Defense 
Margaret A. Arnold,Red Devils,Defense 
Paul S. Gonzalez,Blue Streaks,Offense 
Mark V. Stocks,Red Devils,Defense 
Elizabeth J. Quinn,Red Devils,Offense 
Rusty M. Collette,Red Devils,Offense 
Myra L. Armstrong,Blue Streaks,Defense 
William B. Stewart,Blue Streaks,Defense 
Erin J. Hoch,Red Devils,Defense 
Robin S. Meredith,Blue Streaks,Offense 
Sherie D. Lee,Red Devils,Offense 
Michael A. Whitney,Blue Streaks,Defense 
Louis R. Ochoa,Red Devils,Defense 
Paul R. Garcia,Blue Streaks,Offense 
Chester A. Bailey,Red Devils,Defense 
Johnny B. Coover,Red Devils,Defense 
Emily K. Wright,Red Devils,Offense 
Perry D. Desmarais,Red Devils,Offense 
Judie J. Burns,Blue Streaks,Defense 
Martin L. Dunn,Blue Streaks,Defense 
Stephanie C. Rose,Blue Streaks,Defense 
Don T. Grimes,Blue Streaks,Offense 
Robert C. Devito,Blue Streaks,Offense 
Michael J. Taylor,Red Devils,Defense 
Melissa D. Bush,Red Devils,Offense 
0

これはfgetcsvのみで動作するようになりました。「分解」機能は使用されていません。みんな、ありがとう。

<?PHP 
$columns = 4; 

$file = fopen('CSV Team Example.csv', 'r'); 
$row = 0; 
while (($line = fgetcsv($file)) !== FALSE) 
{ 
//$line is an array of the csv elements 
list($name[], $team[], $team_position[]) = $line; 
$row++; 
} 
$number_of_rows = $row; 
fclose($file); 

// calculate number of rows per column 
$rows_per_column = ceil($number_of_rows/$columns); 
// make your table 
echo "<TABLE BORDER=\"0\">\n"; 

//here we changed the condition to $i < $rows 
for($i = 0; $i < $rows_per_column; $i++) { 

echo "<TR>\n"; 

//here will run another loop for the amount of columns 
for($j = 0; $j < $columns; $j++) { 
    echo "<td width = '200' position = '" . $team_position[$i + ($j * $rows_per_column)] . "'>". $name[$i + ($j * $rows_per_column)] . " <br> &nbsp;" . $team[$i + ($j * $rows_per_column)] . "</td>\n"; 
    } 
echo "</TR>\n"; 
} 
echo "</TABLE>\n"; 
?> 
関連する問題