記入日:2023-02-24 編集日:2023-02-24
SQL見るだけクエリ。今回もPHPの機能ですが、fputcsv関数やfile_put_contents関数を使ってPHPの配列をCSVファイルに保存、追記する方法を考えてみようと思います。
この記事を読むと(約5分)
データベースを使わずに、CSVファイルに文字列を保存、追記する方法がイメージできます。
fputcsv関数やfile_put_contents関数を使うと
配列の内容をCSVファイルに保存することができます。
例えば、以下のような配列があるとします。
//配列を定義する $array = array( array(1, "baseball", 99), array(2, "volleyball", 66), array(3, "tennis", 11) );
fputcsv関数を使う場合は、以下のように書くことができます。
//ファイルを開く $fp = fopen("test.csv", "w"); //配列の各要素に対してCSV形式で書き込む foreach ($array as $data) { fputcsv($fp, $data); } //ファイルを閉じる fclose($fp);
このコードを実行すると、test.csvに以下のような内容が保存されます。
1,baseball,99 2,banana,66 3,volleyball,11
file_put_contents関数を使う場合は、以下のように書くことができます。
//配列からCSV形式の文字列に変換する関数 function array_to_csv($array) { //出力用の変数を初期化する $output = ""; //配列の各要素に対して処理する foreach ($array as $data) { //要素内のカンマやダブルクォートをエスケープする $escaped_data = array_map(function($value) { return '"' . str_replace('"', '""', $value) . '"'; }, $data); //カンマで区切って1行分の文字列にする $line = implode(",", $escaped_data); //改行コードを追加して出力用変数に連結する $output .= $line . "\n"; } //出力用変数を返す return $output; } //配列からCSV形式の文字列に変換する $csv = array_to_csv($array); //ファイルに書き込む file_put_contents("test.csv", $csv);
このコードも同じくtest.csvに同じ内容が保存されます。
//要素内のカンマやダブルクォートをエスケープする
$escaped_data = array_map(function($value) {
return '"' . str_replace('"', '""', $value) . '"';
}, $data);
この処理は、array_map関数とstr_replace関数を組み合わせて、
$dataという配列の要素に含まれるカンマやダブルクォーテーションをエスケープする処理です。
array_map関数は、配列の値に関数処理を加えて、新たな配列を生成する関数です。
第一引数に関数を、第二引数以降に対象の配列を設定します。
この場合、第一引数には無名関数(function($value) {...})が指定されています。
この無名関数は、$valueというパラメータを受け取って、
str_replace関数でカンマやダブルクォーテーションをエスケープして返すように定義されています。
例えば、$dataが["a,b", “c"d”]だった場合、array_map関数は以下のような処理を行います。
- $dataの最初の要素"a,b"を$valueとして無名関数に渡す
- 無名関数内でstr_replace関数でカンマやダブルクォーテーションをエスケープする
- エスケープした結果""a,b""という文字列を返す
- $dataの次の要素“c"d”も同様に無名関数に渡す
- 無名関数内でstr_replace関数でカンマやダブルクォーテーションをエスケープする
- エスケープした結果""c""d"""という文字列を返す
最終的にarray_map関数は[""a,b"", ""c""d"""]という新しい配列($escaped_data)を生成します。
SQLの使いどころ
サイトに大量の情報を掲載することは、ユーザーにとってとても便利なことです。しかし、情報が多すぎると、目的の情報を見つけるのが困難になります。そのため、SQLを使用することで、情報を効率的に管理することができます。
SQLを使用することで、データベース内の情報を検索したり、フィルタリングしたりすることができます。これにより、ユーザーは目的の情報をスムーズかつ簡単に見つけることができます。
また、SQLを使用することで、データを集計したり、統合したりすることもできます。これにより、ユーザーはさまざまな視点から情報を分析することができます。つまり、サイトに多くの情報を掲載することが重要である一方で、その情報を効率的かつ簡単に管理することが求められる場合には、SQLが不可欠であるといえます。
KK
機械工学を専攻。工業デザイナーとして、国内及び海外の自動車・搬送ラインの設計などに従事した後、2003年にウェブシステム会社を設立。UI設計やウェブシステムの開発、DX化のディレクションなどを行っています。