PHP将文件读入数组

时间:2011-10-31 00:06:21

标签: php mysql file file-upload csv

我需要从CSV文件中提取数据并将其插入MySQL数据库。

(见下面的示例文件)

到目前为止,我有一个包含整个文件的数组(用PHP读取文件):

Array ([0] => 01 [1] => 12345678X [2] => Title [3] => 120.00 ......等等。

如何修改数组以为每个项目创建四个组?每个项目都是自己的数组?

例如:

array( array (01,ISBN,Name,Price),
       array (01,ISBN,Name,Price)
      );

此外,如何单独访问这些值并插入MySQL?

例: $price = 1.25;< - 在数组

这是我到目前为止所做的:

    $fp = @fopen($_FILES['filename']['tmp_name'], "r");

    if ($fp) {

         $arr = array();
         while(!feof($fp)) {
          $this_line = fgets($fp);  

          $line = explode("^",$this_line);

          if($line[0] != "") {          
              array_push($arr,$line[0]);
              }
          $i++;
         }

上面的代码返回一个大数组,每列都是一个元素。我希望在一个大型数组中每个数组包含四个元素的数组,以便我可以单独访问每个“行”。

示例文件:

ID 01
Title This is the title
Price 120.00
ISBN xxxxxx
^
ID 02
Title This is the title
Price 20.00
ISBN xxxxxx
^

1 个答案:

答案 0 :(得分:3)

使用fgetcsv,避免CSV解析问题。

它会以数组的形式逐行返回文件,这就是你要求的。

然后你可以使用MySQLi的prepared statement with bound parameters来插入行。

[编辑] 类似这样的事情:

$file = fopen('data.csv', 'r');
$stmt = $connection->prepare("INSERT blah blah blah VALUES(?, ?, ?)");
while (($row = fgetcsv($file, 1000, "\t")) !== FALSE) {
  $stmt->bind_param('types string', $row[0], $row[1], etcetera);
  $stmt->execute();
}