LoginSignup
3
5

More than 5 years have passed since last update.

【PHP】CSV, JSON, XML形式のファイルを読み込む方法

Posted at

各形式のファイルを読み込む方法をまとめました。
今回はさらっと流しているだけなので、エラー処理や文字化け処理は行っていません。

返されるデータは、CSVは配列、JSONとXMLはオブジェクトとして扱っています。

ファイル構成

FilrLoad
  ├── csvFileLoad.php
  ├── item_data.csv
  ├── item_data.json
  ├── item_data.xml
  ├── jsonFileLoad.php
  └── xmlFileLoad.php

CSV

ファイルシステム関数のfopenもありますが、SplFileObjectクラスを使うのが便利そうです。

php.net〜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
3
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5