首页 > 解决方案 > PHP代码根据列值分隔表

问题描述

我有一个 csv 文件,应该根据列值将其转换为 HTML 表,并且我必须根据 csv 的第一列将值放入单独的表中。我认为问题是因为第一列中的 '\n' 。

所以它是这样的:

csv 图像

Result列中,在一行中,我使用逗号 (W,M,P) 分隔了三个值。在我编写的代码中,它被视为单独的表头。谁能帮我解决这个问题?

这是我的代码:

<?php 
    $csv="FinalResult.csv" ;
    $csvcontents=file_get_contents($csv);
    $csv_array = explode("\n", $csvcontents);
    
    $tables = [];
    foreach($csv_array as $key => $value) {
        if ($key == 0) {
            continue;
        }
        $line = explode(',', $value);
        if (array_key_exists($line[0], $tables)) {
            $tables[$line[0]][] = $line;
        } else {
            $tables[$line[0]] = [$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>';
    }
    ?>

我在堆栈溢出中进行了引用,但他们只为一列提供了单个值,而不提供多个值。

但是我得到这样的输出, 输出

所以它将'-'之后的结果列的值作为新标题,我试过但无法解决这个问题,任何人都可以在这件事上真正帮助我。

这是我的输出应该是这样的:

我的输出应该是什么样子

我用黄色标记了所有数据都在同一列中

这是我的 csv 文件:

Team,Date,Opponent,Result
    MIN,May-03,UTA,a.b.c=d-e.f-g.h=log4j2-i.xml-j -k -a4j.k=tp_r-RR.xml -
    MIN,May-04,SEA,"L,Q,J"
    SAC,May-03,DAL,L
    SAC,May-04,TOR,W
    NYN,May-05,BAL,L
    NYN,May-07,MIA,W

标签: phpcsv

解决方案


这是代码

<table>
<?php 
    $csvValues=  array_map('str_getcsv', file('FinalResult.csv'));
    $counter = 0;

    // Header
    echo "<tr>";
    foreach($csvValues[0] as $headers){
        echo "<th>".$headers."</th>";
    }
    echo "</tr>";

    // Content
    foreach($csvValues as $values){
        echo "<tr>";

        if($counter >0){
            foreach($values as $data){
                echo "<td>".$data."</td>";
            }
        }   
        
        echo "</tr>";
        $counter++; 
    }

?>
</table>

推荐阅读