1

Excel を使用して CSV ファイルとして保存したファイルがあります (互換性の問題を回避するために、Windows 7 と Mac OSX の両方で試しました)。

私がこれを行うとき:

ini_set('auto_detect_line_endings', true);
$filename = 'import/clientsimport.csv';
$csvfile = file_get_contents($filename);
$csvarray = str_getcsv($csvfile);
print_r($csvarray);
mysql_close();

すべての行が 1 つの行に変わり、1 レベルの深さしかなく、何千ものキーが連続して実行される配列が得られます。

そこで、別のアプローチを試しました:

ini_set('auto_detect_line_endings', true);
$filename = 'import/clientsimport.csv';
$csvfile = fopen($filename,'r');
$csvarray = fgetcsv($csvfile);
print_r($csvarray);

これは最初の行 (ヘッダーの行) のみを返し、それを超えることはありません。これを正しく行うにはどうすればよいですか?何百もの行があり、行ごとに約 12 個の配列があるため、2 次元のものを取得する必要があります。

CSV では、各行は改行で区切られ、値はコンマで区切られます。囲みはありません。

4

2 に答える 2

2

このようなものはどうですか:

$multiarray = array();
while ($linearray = fgetcsv($cvsfile)) {
   $multiarray[] = $linearray;
}
于 2012-02-28T00:17:54.873 に答える
1

別のキーワードを使用した別の検索で質問を解決しました:

PHP str_getcsv 配列の問題

答えがあります。基本的に、ファイル読み取りメカニズムを次のように変更しました。

$csvfile = fopen($filename,'rb');
while(!feof($csvfile)) {
$csvarray[] = fgetcsv($csvfile);
}

rb改行で読んでいると思いますか?そして、while ステートメントは行をループします。1 つの長い文字列のみを返す file_get_contents() とは異なり、コンテンツを分割してループする必要があるという点で fopen がどのように機能するかを完全に忘れていました。

于 2012-02-28T00:16:36.603 に答える