興味深い問題が発生しています。fopen()
ExcelでCSVファイルを作成し、そのファイルを使用しfgetcsv()
てPHPに読み込もうとしました。予想外に、私のコードによって返された配列から、ファイルには 76 フィールドの 1 行と 16 フィールドの 5 行があると思われます (計算が正しくないことはわかっています... これについては後で説明します)。TextEdit は、行ごとに新しい行を含むファイルをレンダリングするため、その理論を払拭します。TextEdit で改行を削除してから各行に改行を再入力すると、csv が正しく読み込まれます。
新しい行を削除する前に、隠し文字を表示する機能を使用して NetBeans でファイルを開きましたが、netbeans はそれが段落であると認識しているようです。そうfopen()
ではないようです。
php str_getcsv 配列の問題から同様の問題が発生し、最初の例で提供されたコードを使用しても役に立ちませんでした。Excel は改行文字を提供しているように見えますが、他のほとんどのものは改行として認識しますが、そうでfopen()
はありません。人々が興味を持っている場合に備えて、これが私のコードとcsvファイルです。
$data= array();
$handle = fopen(Yii::app()->basePath ."/csv/test.csv", "rb");
while ( !feof($handle) ) {
$data[] = fgetcsv($handle);
}
echo "<pre>";
die(var_dump($data));
fclose($handle);
csv ファイルは次のとおりです。
id,first_name,last_name,address_1,address2,city,state,postal,image_path1,image_path2,image_path3,image_path4,image_path5,text_area,template_name,order_date
id,first_name,last_name,address_1,address2,city,state,postal,image_path1,image_path2,image_path3,image_path4,image_path5,text_area,template_name,order_date
id,first_name,last_name,address_1,address2,city,state,postal,image_path1,image_path2,image_path3,image_path4,image_path5,text_area,template_name,order_date
best ever!,,,704 west jefferson,,winterset,ia,50273,,,,,,,dummy,
hello!!,,,Welcome,,,,,,,,,,,,
Excel テーブルのスクリーンショットへのリンクは次のとおりです: http://grab.by/r9sg
また、各行の最後のフィールドに new line があることに気付きました。つまり、最初の行の終わりになるはずの配列の値はorder\nid
(... 少なくとも文字列に \n が含まれていると思います。 ..)。それは奇妙に思えます... var_dump から見た配列を提供します...:
array(1) {
[0] =>
array(76) {
[0] =>
string(2) "id"
[1] =>
string(10) "first_name"
[2] =>
string(9) "last_name"
[3] =>
string(9) "address_1"
[4] =>
string(8) "address2"
[5] =>
string(4) "city"
[6] =>
string(5) "state"
[7] =>
string(6) "postal"
[8] =>
string(11) "image_path1"
[9] =>
string(11) "image_path2"
[10] =>
string(11) "image_path3"
[11] =>
string(11) "image_path4"
[12] =>
string(11) "image_path5"
[13] =>
string(9) "text_area"
[14] =>
string(13) "template_name"
[15] =>
string(13) "order_date
id"
[16] =>
string(10) "first_name"
[17] =>
string(9) "last_name"
[18] =>
string(9) "address_1"
[19] =>
string(8) "address2"
[20] =>
string(4) "city"
[21] =>
string(5) "state"
[22] =>
string(6) "postal"
[23] =>
string(11) "image_path1"
[24] =>
string(11) "image_path2"
[25] =>
string(11) "image_path3"
[26] =>
string(11) "image_path4"
[27] =>
string(11) "image_path5"
[28] =>
string(9) "text_area"
[29] =>
string(13) "template_name"
[30] =>
string(13) "order_date
id"
[31] =>
string(10) "first_name"
[32] =>
string(9) "last_name"
[33] =>
string(9) "address_1"
[34] =>
string(8) "address2"
[35] =>
string(4) "city"
[36] =>
string(5) "state"
[37] =>
string(6) "postal"
[38] =>
string(11) "image_path1"
[39] =>
string(11) "image_path2"
[40] =>
string(11) "image_path3"
[41] =>
string(11) "image_path4"
[42] =>
string(11) "image_path5"
[43] =>
string(9) "text_area"
[44] =>
string(13) "template_name"
[45] =>
string(21) "order_date
best ever!"
[46] =>
string(0) ""
[47] =>
string(0) ""
[48] =>
string(18) "704 west jefferson"
[49] =>
string(0) ""
[50] =>
string(9) "winterset"
[51] =>
string(2) "ia"
[52] =>
string(5) "50273"
[53] =>
string(0) ""
[54] =>
string(0) ""
[55] =>
string(0) ""
[56] =>
string(0) ""
[57] =>
string(0) ""
[58] =>
string(0) ""
[59] =>
string(5) "dummy"
[60] =>
string(8) "
hello!!"
[61] =>
string(0) ""
[62] =>
string(0) ""
[63] =>
string(7) "Welcome"
[64] =>
string(0) ""
[65] =>
string(0) ""
[66] =>
string(0) ""
[67] =>
string(0) ""
[68] =>
string(0) ""
[69] =>
string(0) ""
[70] =>
string(0) ""
[71] =>
string(0) ""
[72] =>
string(0) ""
[73] =>
string(0) ""
[74] =>
string(0) ""
[75] =>
string(0) ""
}
}
エディター (Netbeans、Coda、TextEdit) で新しい行を単純に削除して新しい行を再入力すると、コードが期待どおりに機能する理由を説明しようとして途方に暮れていると思いますが、ファイルを使用すると機能しません。エクセルで作成。考え?助けてくれてありがとう。