17
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPで連想配列のファイル入出力

Last updated at Posted at 2019-01-09

ベーシックな内容ですが、慣れるまでに時間がかかったのでまとめてみました。

実現したいこと

  • 連想配列をテキストファイル(txt, csv)に出力する
  • テキストファイルの文字列を配列に格納する

連想配列⇄txtファイル

  • fwriteの第二引数は文字列
  • fopenの第二引数
    • "w"は書き出しモード(fopenが呼び出される度にデータがまるっと上書きされる)
    • "a"追記モード(既存のデータの後ろに追加される)

連想配列→txtファイル

  • キーと値をカンマつなぎで文字列化
  • "\n"を入れて改行して出力されるようにしている
$data = array(
   array(1,"apple"),
   array(2,"banana"),
   array(3,"orange")
);
$file = fopen("data.txt", "w");
foreach($data as $key => $value){
   fwrite($file, $key.",".$value."\n");
}
fclose($file);

data.txtの中身はこちら

1,apple
2,banana
3,orange

txtファイル→連想配列

  • fileで一行一要素とする配列が返される
  • explodeで文字列1,applearray(1,"apple")に変換
  • $params[0]がキー、$params[1]が値の連想配列に変換
$data = file("data.txt");
$result = array();
foreach($data as $row){
   $params = explode(",", $row);
   $result[$params[0]] = $params[1];
}

配列$resultの中身はこちら


print_r($result);

Array ( [1] => apple [2] => banana [3] => orange )

上記の例だと、値の文字列の中に,が含まれると余分に分割される(例1,apple,cherry
explodeの第三引数に要素数の上限を渡せば回避できる

// $paramsの要素は2つまで!
$params = explode(",", $row, 2); // Array([1] => apple,cherry)

連想配列⇄csvファイル

連想配列→csvファイル

  • fputcsvについて
    • 第二引数は配列
    • 配列の要素をカンマ区切りで出力する
      • 1配列の出力が終わったら改行される
$data = array(
   1 => "apple",
   2 => "banana",
   3 => "orange" 
);

$file = fopen("data.csv", "w");
fputcsv($file, $data);
fclose($file);

data.csvの中身はこちら↓

apple,banana,orange

値だけファイルに出力されている
ちなみにキーが文字列の場合も同様に値だけ出力された


$data2 = array(
   "one" => "apple",
   "two" => "banana",
   "three" => "orange",
);

$file = fopen("data.csv", "w");
fputcsv($file, $data);
fclose($file);

キーも出力するには...

  • foreachで配列をループ
  • ループ内でfputcsvの第二引数にarray($key, $value)を渡す
$data = array(
   1 => "apple",
   2 => "banana",
   3 => "orange" 
);

$file = fopen("data.csv", "w");
foreach($data as $key => $value){
   fputcsv($file, array($key, $value));
}
fclose($file);

data.csvの中身はこちら

1,apple
2,banana
3,orange

csvファイル→連想配列

最後に

もっとスマートな書き方ありましたらぜひ教えてくださいm(_ _)m

17
19
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
17
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?