在 Yii2 中跳过 CSV 文件的第一行

Posted

技术标签:

【中文标题】在 Yii2 中跳过 CSV 文件的第一行【英文标题】:Skip the first line of a CSV file in Yii2 【发布时间】:2018-06-12 00:27:12 【问题描述】:

公共函数 actionUpload() $model = new CsvForm();

    if($model->load(Yii::$app->request->post()))
        $file = UploadedFile::getInstance($model,'file');
        $filename = 'Data.'.$file->extension;
        $upload = $file->saveAs('uploads/'.$filename);
        if($upload)
            define('CSV_PATH','uploads/');
            $csv_file = CSV_PATH . $filename;
            $filecsv = file($csv_file);
            print_r($filecsv);
            foreach($filecsv as $data)

                $modelnew = new Customer1();
                $hasil = explode(",",$data);
                $nim = $hasil[0];
                $nama = $hasil[1];
                $jurusan = $hasil[2];
                $angkatan = $hasil[3];

                $modelnew->username = $nim;
                $modelnew->firstname = $nama;
                $modelnew->lastname = $jurusan;
                $modelnew->password = $angkatan;

                $modelnew->save();
            
            unlink('uploads/'.$filename);
            return $this->redirect(['site/index']);
        
    else
        return $this->render('upload',['model'=>$model]);
    

这是我的 CSV 数据

user1,name,pass,info 用户 2,姓名,通行证,信息 等等,

所以我想跳过粗体内容并继续执行。

【问题讨论】:

【参考方案1】:

你可以移动数组

$filecsvtemp = file($csv_file);
$filecsv = array_shift($filecsvtemp );

这样,数组的第一行就不会出现在结果数组中

否则使用计数器

        $cnt = 0;
        $filecsv = file($csv_file);
        print_r($filecsv);
        foreach($filecsv as $data)

            if ($cnt!=0)
              $modelnew = new Customer1();
              $hasil = explode(",",$data);
              $nim = $hasil[0];
              $nama = $hasil[1];
              $jurusan = $hasil[2];
              $angkatan = $hasil[3];

              $modelnew->username = $nim;
              $modelnew->firstname = $nama;
              $modelnew->lastname = $jurusan;
              $modelnew->password = $angkatan;

              $modelnew->save();

            
            $cnt++;
        

【讨论】:

添加这两行后我得到了错误 -** Invalid argument provided for foreach()** 以上代码工作正常。你拯救了我的一天。 @scaisEdge

以上是关于在 Yii2 中跳过 CSV 文件的第一行的主要内容,如果未能解决你的问题,请参考以下文章

在CSV文件中跳过标题

如何跳过 CSV 中的第一行项目?

Python 3.2 在 csv.DictReader 中跳过一行

在 MS Access 中跳过 CSV 文件的前三行(使用 DoCmd?)

在 Fortran90 中从文本文件中跳过一行

FOR /F 这是在批处理文件中跳过一行的正确方法