pagetop

BLOG

phpでCSVデータの内容を検索した結果だけをCSVでダウンロードする

  • HOME

  • BLOG

  • phpでCSVデータの内容を検索した結果だけをCSVでダウンロードする

Article

phpでCSVデータの内容を検索した結果だけをCSVでダウンロードする

PHP

phpでCSVデータの内容を検索するで、CSVデータの内容を検索してhtmlに表示するところまでメモしました。ここから、表示したhtmlの内容をCSVデータで出力したいと、追加のリクエスト…..色々、頭を抱えて試行錯誤….なんとか出力できたので、せっかくだからメモ。

 

phpでCSVデータの内容を検索するである期間問合せしたユーザーをCSVBから検索するプログラムをメモしました。ざっくり言うと、登録年月日をGETで取得して表示するというものです。検索結果の要件やプログラムについては、phpでCSVデータの内容を検索するで確認してください。

 

登録年月日をGETで取得

GETの変数は以下になります。

$start = $_GET['start'];
$end = $_GET['end'];

 

該当のCSVデータ

CSVデータ名はcsv/contact.csvで、フォーマットは以下になります。

登録年月日,会員氏名,メールアドレス,都道府県,
20211001,山田太郎,taro@sample.com,東京都,
20211010,山田花子,hanako@sample.com,東京都,
20211020,日本太郎,n.taro@sample.com,神奈川県,
20211101,日本花子,n.hanako@sample.com,千葉県,

phpでCSVデータの内容を検索するで、登録年月日2021年10月1日〜2021年10月10日までのデータを取得しました。

 

取得したデータ

20211001,山田太郎,taro@sample.com,東京都,
20211010,山田花子,hanako@sample.com,東京都,

 

検索結果として表示

これをHTMLに検索結果として表示しました。

<table>
<tr>
<th>登録年月日</th>
<th>会員氏名</th>
<th>メールアドレス</th>
<th>都道府県</th>
</tr>
<tr>
<th>20211001</th>
<th>山田太郎</th>
<th>taro@sample.com</th>
<th>東京都</th>
</tr>
<tr>
<th>20211010</th>
<th>山田花子</th>
<th>hanako@sample.com</th>
<th>東京都</th>
</tr>
</table>

とここまでがphpでCSVデータの内容を検索するの内容です。

 

CSV生成プログラム

検索結果にCSV生成プログラムへのリンクを設定します。

<table>
<tr>
<th>登録年月日</th>
<th>会員氏名</th>
<th>メールアドレス</th>
<th>都道府県</th>
</tr>
<tr>
<th>20211001</th>
<th>山田太郎</th>
<th>taro@sample.com</th>
<th>東京都</th>
</tr>
<tr>
<th>20211010</th>
<th>山田花子</th>
<th>hanako@sample.com</th>
<th>東京都</th>
</tr>
</table>
<br><br>
<a href="https://www.example.net/csv.php?start=20211001&end=20211010" target="_blank">CSVをダウンロードする</a>

 

CSVに出力する

リンク先のcsv.phpを作成します。

csv.php
<?php
$start = $_GET['start'];
$end = $_GET['end'];

$csv_file="csv/contact.csv";
$openfile = file_get_contents($csv_file);
$csv_gyo = explode("\n", $openfile);

//出力するCSVデータのファイル名
$datename=date("Ymdhis");
$download_file=$start."_".$end."_".$datename.".csv";

header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=$download_file");
header("Content-Transfer-Encoding: binary");

// 変数初期化
$csv = null;

// 1行目のヘッダを作成
$csv = '"登録年月日","会員氏名","メールアドレス","都道府県"'."\n";

// 出力データ生成
foreach( $csv_gyo as $value ) {
list($ymd_data,$name,$mail,$pref) = explode(",", $value);

if($ymd_data =="登録年月日" || $ymd_data ==""){
print <<<EOF
EOF;
}
elseif(($end>=$ymd_data) && ($start<=$ymd_data)){
$csv .= '"'.$ymd_data.'","'.$name.'","'.$mail.'","'.$pref.'"'."\n";
}
}

echo $csv;
return;

?>

 

CSVデータのファイル名

ファイル名は以下で設定します。

$datename=date("Ymdhis");
$download_file=$start."_".$end."_".$datename.".csv";

 

ファイルのダウンロード

ファイルの強制ダウンロード設定をします。

header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=$download_file");
header("Content-Transfer-Encoding: binary");

 

CSVヘッダを生成する

CSVデータのヘッダを以下で設定します。

$csv = '"登録年月日","会員氏名","メールアドレス","都道府県"'."\n";

 

出力データ生成する

foreach関数で該当のCSVデータを読み、さらにGETで得た条件のデータのみ抽出します。

foreach( $csv_gyo as $value ) {
list($ymd_data,$name,$mail,$pref) = explode(",", $value);

if($ymd_data =="登録年月日" || $ymd_data ==""){
print <<<EOF
EOF;
}
elseif(($end>=$ymd_data) && ($start<=$ymd_data)){
$csv .= '"'.$ymd_data.'","'.$name.'","'.$mail.'","'.$pref.'"'."\n";
}
}

 

CSVを出力する

最後にCSVデータを出力します。

echo $csv;
return;

 

出力されたCSVデータを確認

検索条件は登録年月日2021年10月1日〜2021年10月10日までのデータですから、生成されたCSVデータの内容が以下になっていればOKです。

登録年月日,会員氏名,メールアドレス,都道府県,
20211001,山田太郎,taro@sample.com,東京都,
20211010,山田花子,hanako@sample.com,東京都,

 

以上です。
色々応用できそうです。
これか研究します。

Spread the love