首页 > 解决方案 > 在 PHP 中读取 CSV 文件并验证其第一行是否包含标题和日期

问题描述

我必须使用 php 上传 csv 文件。但在上传之前,我需要验证两件事。

  1. 如果它的标题是标题和日期(只有列)。

  2. 前两行标题不应该相同。

这是预期文件的结构。

Title   Date
"The Forest: Season 1: Episode 1",  "7/7/2018"
"Forgive Us Our Debts", "7/7/2018"
"Mr. Sunshine: Season 1: Episode 1",    "7/7/2018"

到目前为止的代码

$rows   = array_map('str_getcsv', file($_FILES["file"]["tmp_name"]));
    $header = array_shift($rows);
    $csv    = array();
    foreach($rows as $row) {
        $csv[] = array_combine($header, $row);
    }

我在关联数组中有一个 csv 文件,但无法读取第一行。

如何读取带有行索引的 CSV 行?

标签: phpfgetcsv

解决方案


str_getcsv 有一个逗号作为默认分隔符。而且您只能转换一行 CSV。如果你想转换整个文件,你应该使用 fgetcsv [ https://secure.php.net/manual/en/function.fgetcsv.php]

此代码示例将起作用:

<?php

$csv = "Title\tDate
\"The Forest: Season 1: Episode 1\"\t\"7/7/2018\"
\"Forgive Us Our Debts\",\t\"7/7/2018\"
\"Mr. Sunshine: Season 1: Episode 1\",\t\"7/7/2018\"";

$rows   = array_map(function ($csv){
    return str_getcsv($csv, "\t");
}, explode("\n",$csv));


$header = array_shift($rows);
$result    = array();
foreach($rows as $row) {
   $result[] = array_combine($header,$row);
}

var_dump($result);

推荐阅读