テクニカル雑記帳です
PHPでCSVのデータを加工するときに使った関数の備忘録
改行とカンマで区切られたCSV文字列を想定し実施
目的:与えられたCSV形式のデータから、頭2つのデータを配列として取り出す
- こんな感じのフォームを準備
<form action="{{ action('よしなに') }}" method="よしなに">
{{ csrf_field() }}
<textarea name="csv" cols="30" rows="10" placeholder="CSV情報を入れてください"></textarea>
<input type="submit" value="SEND">
<pre>
例:
title-1, author-1, description-1
title-2, author-2, description-2
title-3, author-3, description-3
</pre>
</form>
- このフォームに例をそのままぶち込んで送信したものを加工する。
<?php
$csv = $request["csv"];
//改行ごとの配列
$item_groups = preg_split("/\n|\r\n|\r/", $csv);
//タイトルと著者の配列
$items = [];
$keys = ['title', 'author'];
foreach ($item_groups as $item_group) {
$c = preg_split("/,/", $item_group); //カンマごとに配列に格納
$chunk = array_chunk($c, 2)[0]; //前から2項目のみを配列に追加
$changeKey = array_combine($keys, $chunk); //keyを変更
array_push($items, $changeKey);
}
説明
preg_split
を使って、改行ごとに配列にする.
正規表現は\n|\r\n|\r
で、改行コードを網羅.array_chunk
を使って、目的のindexまでを取得し配列にする.
これはindex[0][1]を取り出していると言うより、2個ずつ配列を分割している.
今回はindex[0][1]が欲しかったので、2個ずつ取り出した初めの配列を使った.array_combine
を使って、配列キーを変更する.array_push
を使って、結果配列に追加していく.
-array_push
🙂💬
特筆することはないけど、よく使う配列操作の関数は覚えておきたいなと思う.
あと、配列そのものに影響するのか、返り値が目的のものなのかというところも気をつけたい.