Прочитайте файл CSV в PHP и проверьте, если его первая строка содержит заголовок и дату - PullRequest
0 голосов
/ 01 октября 2018

Я должен загрузить CSV-файл, используя php.но перед загрузкой мне нужно проверить его на две вещи.

  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 с индексами строк?

Ответы [ 3 ]

0 голосов
/ 01 октября 2018

Попробуйте это

$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
        }
    }    
}
0 голосов
/ 01 октября 2018

Вы можете сделать что-то вроде этого:

$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;
          }
     }
}
0 голосов
/ 01 октября 2018

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);
...