前提
PHP本格入門(上)というテキストを参照して、
csvファイルを読み込んで表示するというプログラムを検証しています。
PHPでCSVファイルを読み込んだ場合、どのようなロジックで「,(カンマ)」判定をされているのかをご教授いただきたいです。
具体的な事象は下記プログラムおよび実行結果をご参照ください。
該当のソースコード
PHP
1$csv = new SplFileObject('files/sample.csv'); 2$csv->setFlags(SplFileObject::READ_CSV); 3 4foreach ($csv as $value) { 5 print_r($value); 6}
sample.csv(文字コード:UTF8)
1商品名,価格 2掃除機,"15,000" 3エアコン,"60,000" 4"アイロン高性能","20,000"
※CSVファイルの「,(カンマ)」はすべて半角で統一されております。
Array ( [0] => 商品名,価格 ) Array ( [0] => 掃除機,"15 [1] => 000" ) Array ( [0] => エアコン [1] => 60,000 ) Array ( [0] => アイロン高性能 [1] => 20,000 )
確認したいこと
上記実行結果ですと、下記の場合掃除機の直後の「,」で区切られず、
array( [0] => 掃除機,"15 [1] => 000" )
下記の場合、エアコンの直後できちんと区切られています。
Array ( [0] => エアコン [1] => 60,000 )
また、「商品名」と「価格」も「,(カンマ)」で区切られず、1行で判定されています。
なお、上記事象に直接関係はないかもしれませんが、文字コードがSJISのCSVファイルを下記のようにプログラム内でUTF8に変換して出力した場合は、上記のような事象は発生せず、期待通りに「,(カンマ)」で区切られておりました。
(テキストではその方法では動作しないと記載があったのですが、なぜかきちんと動作しました)
PHP
1foreach ($csv as $value) { 2 mb_convert_variables('UTF-8', 'SJIS-win', $value); 3 print_r($value); 4}
Array ( [0] => 商品名 [1] => 価格 ) Array ( [0] => 掃除機 [1] => 15,000 ) Array ( [0] => エアコン [1] => 60,000 ) Array ( [0] => アイロン高性能 [1] => 20,000 )
上記事象の理由をご教授いただきたいです。
よろしくお願いいたします。