2016-06-17 7 views
0

私は2つの.csvファイルのデータを取得する作業システムを持っています。すべてのデータを配列に保存し、両方のcsvファイルに存在するデータの一部を比較します。システムはうまくいくが、後で私はいくつかの行が配列に表示されないことを知った。私はcsvファイルを読むのに適切なコードを使用しないと思う。私はシステムを編集/改善したい。これは、CSVファイルからデータを読み込んだり取得したりするコードです。適切に.csvファイルのデータをPHPで読み取る

$thedata = array(); 

$data = file("upload/payment.csv"); 

    foreach ($data as $deposit){ 

     $depositarray = explode(",", $deposit); 
     $depositlist = $depositarray; 

     $key = md5($depositlist[9] . $depositlist[10]); 

     $thedata[$key]['payment'] = array(
     'name' => $depositlist[0], 
     'email' => $depositlist[1], 
     'modeofpayment' =>$depositlist[8], 
     'depositdate' => $depositlist[9], 
     'depositamount' => number_format($depositlist[10],2) 
    ); 
} 

'<pre>',print_r($thedata),'</pre>'; 
//more code here for comaparing of datas... 

1)csvファイルを読み込むときfile("upload/payment.csv")と間違っていますか?

2.) システムに適用され、コード全体を変更することなく、csvファイルを読み込む際のベストコードは何ですか? foreachループのままにする必要があります。

3.)fgetcsvは既存のコードよりもはるかに優れていますか?どのような変更を行う必要がありますか?

+0

私はそのは上の障害の特定の線のような、問題にしている疑いがあるでしょう正しく終了していません。ファイルをテキストエディタで開きます。行を見つけて、奇妙なものがあるかどうかを確認してください。 –

+0

@Dagon。私のCSVファイルのフィールドの一部が空であり、一部がカンマを持っています。 –

+0

デリミネーターの中にカンマがある場合は、ネイティブcsv関数を使用していて自分自身をロールバックしないでください。 –

答えて

1

はい、この目的で "fgetcsv"を使用できます。 fgetcsv()関数は、開いているファイルから行を解析します。この関数は、成功した場合は配列のCSVフィールドを返し、失敗した場合はFALSEを返し、EOFを返します。下記の例をご確認ください

EG1:

<?php 
$file = fopen("contacts.csv","r"); 
print_r(fgetcsv($file)); 
fclose($file); 
?> 

例2:

<?php 
$file = fopen("contacts.csv","r"); 

while(! feof($file)) 
{ 
print_r(fgetcsv($file)); 
} 

fclose($file); 
?> 

リンク:https://gist.github.com/jaywilliams/385876

+0

foreachループを使用したい場合は参照がありますか? –

関連する問題