pagetop

BLOG

phpでCSVデータの内容を検索する

  • HOME

  • BLOG

  • phpでCSVデータの内容を検索する

Article

phpでCSVデータの内容を検索する

PHP

最近お問合せフォームをつくったんですが、登録後CSVデータを生成するようにしています。
そこで、クライアントからリクエスト。
「CSVデータの中からある期間お問い合わせしたユーザーをWEBで検索するようにしてほしい」エクセルでも可能ですが、データをダウンロードせずに検索したいと….

で、つくったのでメモします。

 

CSVデータの内容

今回検索対象となるCSVサンプルデータをみてみます。

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

まあ、実際にはもっと情報は多いのですが、ざっくり言うとこんなかんじです。

 

検索要件

登録年月日で情報をソートします。

例えば、「2021年10月1日」〜「2021年10月10日」までに登録したユーザーをヒットさせたいわけです。

 

プログラム

早速プログラムを構築します。
今回は検索用のHTMLは省略します。
GETで期間情報を取得して、検索結果を表示したいと思います。

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

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

<!DOCTYPE html>

<html lang="ja"><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>テスト</title>
<meta name="viewport" content="initial-scale=1">
</head>

<body>

<table>
<tr>
<th>登録年月日</th>
<th>会員氏名</th>
<th>メールアドレス</th>
<th>都道府県</th>
</tr>

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

$table_list=<<<END
<tr>
<td>$ymd_data</td>
<td>$name</td>
<td>mail</td>
<td>pref</td>
</tr>
END;

if($ymd_data =="登録年月日" || $ymd_data ==""){
print <<<EOF
EOF;
}
elseif(($end>=$ymd_data) && ($start<=$ymd_data)){
print <<<EOF
$table_list
EOF;
}
}
?>

</table>

</body>
</html>

 

GETで取得する

今回は、GETで登録年月日を取得します。その際、以下のようなURLになります。

https://www.example.net/search.php?start=20211001&end=20211010

で、$_GETで取得します。

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

 

CSVデータを読み込む

該当のCSVデータはcsv/contact.csvです。それをfile_get_contentsで読み込みます。

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

 

CSVデータを表示する

GETで取得した情報を表示するにあたり、foreach関数にif文を入れて検索結果を表示する設定をします。

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

$table_list=<<<END
<tr>
<td>$ymd_data</td>
<td>$name</td>
<td>mail</td>
<td>pref</td>
</tr>
END;

if($ymd_data =="登録年月日" || $ymd_data ==""){
print <<<EOF
EOF;
}
elseif(($end>=$ymd_data) && ($start<=$ymd_data)){
print <<<EOF
$table_list
EOF;
}
}

該当のCSVデータには「登録年月日」等のヘッダ情報が入ってます。そのままだと、ヘッダも表示されるので以下で表示されない用意します。

if($ymd_data =="登録年月日" || $ymd_data ==""){

その上で登録年月日に応じた検索結果を表示します。

elseif(($end>=$ymd_data) && ($start<=$ymd_data)){

これで、登録年月日2021年10月1日〜2021年10月10日までのデータを表示します。

出力結果
<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>

以上です。
ここまでくると、検索結果をCSVでダウンロードしたいなんてリクエストもあったりします。
次回、その辺もメモしたいと思います。

Spread the love