使用 php 从 CSV 文件中仅提取 3 个值

Extract only 3 values from a CSV file using php

我有一个包含 9500 行的 csv 文件,每行有 10 个值。

我只想从每一行向数据库提供 3 个值。如何使用 PHP.

实现此目的
1,"Goroka","Goroka","Papua New Guinea","GKA","AYGA",-6.081689,145.391881,5282,10,"U","Pacific/Port_Moresby"
2,"Madang","Madang","Papua New Guinea","MAG","AYMD",-5.207083,145.7887,20,10,"U","Pacific/Port_Moresby"
3,"Mount Hagen","Mount Hagen","Papua New Guinea","HGU","AYMH",-5.826789,144.295861,5388,10,"U","Pacific/Port_Moresby"

我只需要将每行的第 1、5 和 8 个值保存到数据库中。

我尝试分解每一行,然后从数组中获取每个值并循环遍历每一行。但这需要时间。我正在寻找更好的方法。

您可以使用 fgetcsv() 获取每一行数据并在循环中提取所需的值,如下所示:

// setup pdo statement and bind parameters outside of the loop
$field1 = "";
$field2 = "";
$field3 = "";
$pdo_stmt = $db->prepare("INSERT INTO <table> VALUES(?,?,?)");
$pdo_stmt->bind_param(1, $field1, PDO::PARAM_INT);
$pdo_stmt->bind_param(2, $field2, PDO::PARAM_STRING);
$pdo_stmt->bind_param(3, $field3, PDO::PARAM_STRING);

// try to open the csv file containg the data
$fp = fopen("file.csv", "r");

// loop through each row
while($row = fgetcsv($fp) {

  // store field 0, 4 and 7 from each row
  $field1 = $row[0];
  $field2 = $row[4];
  $field3 = $row[7];

  // insert into database
  $pdo_stmt->execute();
}

// close the file
fclose($fp);

当然以上仅作为示例,您应该检查文件是否真的可以打开等等。如果您使用的是准备好的语句,请注意您应该准备语句并将参数绑定到循环外部以提高性能。