【问题标题】:CSV File to Separate HTML Tables Based on Column Values基于列值分隔 HTML 表的 CSV 文件
【发布时间】:2016-05-20 06:00:05
【问题描述】:

我有一个 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 中,前两个表为“american-container”,前两个表为“national-container”后两个。理想情况下,每个表都有两个标题行——团队名称和列标签——以及日期/对手/结果数据。以下是 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);

感谢您的帮助。

【问题讨论】:

  • 如果问题解决了先生,不要忘记将我的答案标记为已解决 :)
  • 当然可以,但我仍在尝试找出其中的一部分。

标签: php html csv


【解决方案1】:

这应该可行:

<?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

【讨论】:

  • 非常感谢,Sofiene,但前两列不应该是表数据的一部分。第一列用于说明将其放入哪个 div,而第二列是列标签上方的标题行,如下所示:NYN&lt;br /&gt;Date Opponent Result&lt;br&gt;May 5 BAL L
  • @Beau 我更新了代码 ;),我把联赛放在桌子上方的 H1 中:)
  • 还有一件事我想不通,Sofiene:你如何将第一列(美国或国家)放入表类(我有一个 jquery 函数,然后将其附加到它的匹配项分)?我知道信息在 $tables[$line[0]] 中,但我不知道如何将其放入 table 标记中。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-12-06
  • 2023-03-30
  • 2022-12-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2020-11-17
  • 1970-01-01
相关资源
最近更新 更多