2011-10-31 43 views
0

私はCSVファイルからデータを抽出し、それをMySQLデータベースに挿入する必要があります。PHPファイルを配列に読み込む

Array ([0] => 01 [1] => 12345678X [2] => Title [3] => 120.00 ...など:

(以下のサンプルファイルを参照してください)

は、これまでのところ私は、ファイル全体の配列(PHPでファイルの読み込み)を持っています。

各アイテムに対して4つのグループを作成するには、どのようにアレイを変更できますか?各項目は独自の配列ですか?例えば

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++; 
     } 

上記のコードは、各列の要素を一つの大きな配列を返します。 1つの大きな配列内に配列ごとに4つの要素の配列を配置して、各行に個別にアクセスできるようにしたいと思います。

サンプルファイル:

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解析の問題を回避。

ファイルを1行ずつ配列形式で返します。これはあなたが求めている配列です。

次に、MySQLiのprepared statement with bound parametersを使用して行を挿入できます。

[EDIT]このような何か:

$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

これは、ファイル全体をメモリにスラッピングするのではなく、一度に1行を処理できることを意味します。 – staticsan

関連する問題