ベーシックな内容ですが、慣れるまでに時間がかかったのでまとめてみました。
実現したいこと
- 連想配列をテキストファイル(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,apple
をarray(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ファイル→連想配列
- txtファイル→連想配列と同じ
最後に
もっとスマートな書き方ありましたらぜひ教えてくださいm(_ _)m