2011-10-31 83 views
0

我需要從CSV文件中提取數據並將其插入到MySQL數據庫中。PHP將文件讀入數組

(見下面的示例文件)

到目前爲止,我有整個文件的數組(閱讀與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; < --in陣列

這是我迄今爲止:

$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

如何領域(每行)的文件中分離出來? – hakre

+0

不幸的是空間......所以它不能被輕鬆解析,因爲標題中有空格。 –

+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(); 
} 
+0

...或PDO,更容易準備/綁定API – Phil

+0

你能提供一個代碼示例嗎? –

+1

這也意味着你可以一次處理一行,而不是試圖將整個文件寫入內存。 – staticsan