各形式のファイルを読み込む方法をまとめました。
今回はさらっと流しているだけなので、エラー処理や文字化け処理は行っていません。
返されるデータは、CSVは配列、JSONとXMLはオブジェクトとして扱っています。
ファイル構成
FilrLoad
├── csvFileLoad.php
├── item_data.csv
├── item_data.json
├── item_data.xml
├── jsonFileLoad.php
└── xmlFileLoad.php
CSV
ファイルシステム関数のfopenもありますが、SplFileObjectクラスを使うのが便利そうです。
item_data.csv
1,apple,100
2,orange,80
3,peach,130
csvFileLoad.php
<?php
// ファイルを読み込みのみでオープンする
// ファイルポインタをファイルの先頭にセットする
$handle = fopen('item_data.csv', 'r');
// 読み込んだ行を分割し配列にして返す
// 配列を各変数に代入し、出力する
while (($row = fgetcsv($handle, 4096)) !== false) {
list($item_id, $item_name, $item_price) = $row;
echo $item_id.','.$item_name.','.$item_price.'<br>'."\n";
}
fclose($handle);
// SplFileObjectクラスを使用する
$file = new SplFileObject('item_data.csv');
// フラグをセットする
// CSV列として行を読み込む
$file->setFlags(SplFileObject::READ_CSV);
foreach ($file as $row) {
list($item_id, $item_name, $item_price) = $row;
echo $item_id.','.$item_name.','.$item_price.'<br>'."\n";
}
// 出力結果
// 1,apple,100
// 2,orange,80
// 3,peach,130
JSON
item_data.json
{"Items":
[
{
"item_id": 1,
"item_name": "apple",
"item_price": 100
},
{
"item_id": 2,
"item_name": "orange",
"item_price": 80
},
{
"item_id": 3,
"item_name": "peach",
"item_price": 130
}
]
}
jsonFileLoad.php
<?php
// ファイルの内容を全て文字列に読み込む
$json_data = file_get_contents('item_data.json');
// JSONエンコードされた文字列を受け取り、オブジェクトに変換する
$all_data = json_decode($json_data);
foreach ($all_data as $data) {
foreach ($data as $line) {
echo $line->item_id.','.$line->item_name.','.$line->item_price.'<br>'."\n";
}
}
// 出力結果
// 1,apple,100
// 2,orange,80
// 3,peach,130
XML
item_data.xml
<?xml version="1.0"?>
<items>
<item>
<item_id>1</item_id>
<item_name>apple</item_name>
<item_price>100</item_price>
</item>
<item>
<item_id>2</item_id>
<item_name>orange</item_name>
<item_price>80</item_price>
</item>
<item>
<item_id>3</item_id>
<item_name>peach</item_name>
<item_price>130</item_price>
</item>
</items>
xmlFileLoad.php
<?php
// XMLファイルをパースし、オブジェクトに代入する
$handle = simplexml_load_file('item_data.xml');
foreach ($handle->item as $item) {
echo $item->item_id.','.$item->item_name.','.$item->item_price.'<br>'."\n";
}
// 出力結果
// 1,apple,100
// 2,orange,80
// 3,peach,130