CSV文件根据列值分隔HTML表

时间:2016-05-20 06:00:06

标签: php html csv

我有一个csv文件,通过php转换为html表(在Joby Joseph的帮助下):Dynamically display a CSV file as an HTML table on a web page

但是,我想根据前两列中的值将数据放入单独的表和容器div中。所以如果这是我的csv数据:

League,Team,Date,Opponent,Result
american,MIN,May 3,UTA,W
american,MIN,May 4,SEA,L
american,SAC,May 3,DAL,L
american,SAC,May 4,TOR,W
national,NYN,May 5,BAL,L
national,NYN,May 7,MIA,W
national,DET,May 6,DEN,L
national,DET,May 7,POR,L

将创建四个表(MIN,SAC,NYN和DET),它们将被放入我已经创建的容器div中,前两个用于“美国容器”和“国家容器”用于第二个。理想情况下,每个表都有两个标题行 - 团队名称和列标签 - 以及日期/对手/结果数据。以下是Joby的解决方案,将csv放入一个表中:

function jj_readcsv($filename, $header=false) {
$handle = fopen($filename, "r");
echo '<table>';
//display header row if true
if ($header) {
    $csvcontents = fgetcsv($handle);
    echo '<tr>';
    foreach ($csvcontents as $headercolumn) {
        echo "<th>$headercolumn</th>";
    }
    echo '</tr>';
}
// displaying contents
while ($csvcontents = fgetcsv($handle)) {
    echo '<tr>';
    foreach ($csvcontents as $column) {
        echo "<td>$column</td>";
    }
    echo '</tr>';
}
echo '</table>';
fclose($handle);
}
jj_readcsv('test.csv',true);

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

这应该有效:

<?php
$csv = "League,Team,Date,Opponent,Result\namerican,MIN,May 3,UTA,W\namerican,MIN,May 4,SEA,L\namerican,SAC,May 3,DAL,L\namerican,SAC,May 4,TOR,W\nnational,NYN,May 5,BAL,L\nnational,NYN,May 7,MIA,W\nnational,DET,May 6,DEN,L\nnational,DET,May 7,POR,L";
$csv_array = explode("\n", $csv);
$tables = [];
foreach($csv_array as $key => $value) {
    if ($key == 0) {
        continue;
    }
    $line = explode(',', $value);
    if (array_key_exists($line[1], $tables)) {
        $tables[$line[1]][] = $line;
    } else {
        $tables[$line[1]] = [$line];
    }
}

foreach ($tables as $key => $value) {
    echo '<h1> ' .$key. ' </h1>'; // YOUR TITLE (Team)
    echo "<table>";
    echo '<tr>';
    foreach (explode(',', $csv_array[0]) as $keyHeader => $valueHeader) {
        if (in_array($keyHeader, [0, 1])) {
            continue;
        }
        echo "<th>$valueHeader</th>";
    }
    echo '</tr>';
    foreach ($value as $keyRow => $valueRow) {
        echo '<tr>';
            foreach ($valueRow as $keyValue => $valueValue) {
                if (in_array($keyValue, [0, 1])) {
                    continue;
                }
                echo "<td>$valueValue</td>";
            }
        echo '</tr>';
    }
    echo '</table>';
}

这是我得到的: Jsfiddle