我必须使用php上传一个csv文件。但是在上传之前,我需要先对其进行两件事验证。
,如果其标题为“标题”和“日期”(只有列)。
前两行标题不应相同。
这是预期文件的结构。
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行?
答案 0 :(得分:0)
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);
答案 1 :(得分:0)
尝试一下
$csv = array_map('str_getcsv', file('data.csv'));
if(isset($csv[0])){
if($csv[0][0] != 'Title' || $csv[0][1] != 'Date'){
return "Heading(Title and/or Date) is missing.";
}else{
foreach ($csv as $key => $value) {
//Process further
}
}
}
答案 2 :(得分:0)
您可以执行以下操作:
$file = new SplFileObject("file.csv");
$file->setFlags(SplFileObject::READ_CSV);
$valid = true;
foreach ($file as $i => $row) {
if ($i > 1) break;
list($title, $date) = $row;
if ($i === 0 && ($title !== 'Title' || $date !== 'Date')) {
$valid = false;
} else {
$second_row = $file[2];
if ($title === $second_row[0]) {
$valid = false;
}
}
}