首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP从CSV文件创建多列表格

使用PHP从CSV文件创建多列表格
EN

Stack Overflow用户
提问于 2009-08-11 01:55:25
回答 5查看 6.2K关注 0票数 1

我正在尝试使用PHP从CSV文件创建一个多列的表。我希望表格单元格垂直列出。例如,如果我有一个CSV文件,其名称为:

代码语言:javascript
复制
bill
mike
sarah
steve
kim
dave

假设我需要两列,我希望表格像这样垂直列出:

代码语言:javascript
复制
bill   steve     
mike   kim   
sarah  dave

我不希望表格以水平方式列出,如下所示:

代码语言:javascript
复制
bill   mike     
sarah  steve   
kim    dave

我使用下面的代码从CSV文件中创建了一个包含球员姓名和球队名称的单列表格--我还传入了一个球队位置属性。我希望能够将该列垂直拆分为3列。代码如下:

代码语言:javascript
复制
<?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文件:

代码语言:javascript
复制
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
EN

回答 5

Stack Overflow用户

发布于 2009-08-11 02:03:28

首先将整个文件读取到一个项目数组中,然后将该数组拆分为X个部分(其中X是所需的列数),然后将每个部分中的一个项目输出到一行中,对每一行重复上述操作。

您当前在从文件中读取时在同一循环中输出的方法不适用于您试图拆分它的方式,因为在您看到所有项之前,您不知道第2列中的第一项将是什么。

票数 1
EN

Stack Overflow用户

发布于 2009-08-11 03:15:22

对不起,我误解了你的问题。

代码语言:javascript
复制
$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>';

返回:

代码语言:javascript
复制
bill    steve
mike    kim
sarah   dave
票数 0
EN

Stack Overflow用户

发布于 2009-08-11 05:38:01

参见下面的伪代码,你可以使用php中的mod操作符来避免拆分和复制数组。

编辑:忘记初始化$numcols变量!!应该适用于任意数量的

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1258122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档