我正在尝试使用PHP从CSV文件创建一个多列的表。我希望表格单元格垂直列出。例如,如果我有一个CSV文件,其名称为:
bill
mike
sarah
steve
kim
dave假设我需要两列,我希望表格像这样垂直列出:
bill steve
mike kim
sarah dave我不希望表格以水平方式列出,如下所示:
bill mike
sarah steve
kim dave我使用下面的代码从CSV文件中创建了一个包含球员姓名和球队名称的单列表格--我还传入了一个球队位置属性。我希望能够将该列垂直拆分为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> " . $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发布于 2009-08-11 02:03:28
首先将整个文件读取到一个项目数组中,然后将该数组拆分为X个部分(其中X是所需的列数),然后将每个部分中的一个项目输出到一行中,对每一行重复上述操作。
您当前在从文件中读取时在同一循环中输出的方法不适用于您试图拆分它的方式,因为在您看到所有项之前,您不知道第2列中的第一项将是什么。
发布于 2009-08-11 03:15:22
对不起,我误解了你的问题。
$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发布于 2009-08-11 05:38:01
参见下面的伪代码,你可以使用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>';或者是它的一个变体。
https://stackoverflow.com/questions/1258122
复制相似问题