PHPでCSVデータを絞り込み表示する方法
PHPでCSVファイルを読み込み、条件に一致するデータだけを絞り込み表示する方法を紹介します。部署名やカテゴリ名などを指定して必要なデータだけを抽出できます。CSVを簡易データベースとして利用し、検索やフィルター機能を実装したい場合に使えるサンプルコードです。
コードについて
本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
CSVデータ件数:10件
| 氏名 | 部署 | メールアドレス |
|---|---|---|
| 山田 太郎 | 営業 | taro@example.com |
| 佐藤 花子 | 企画 | hanako@example.com |
| 鈴木 一郎 | 開発 | ichiro@example.com |
| 高橋 健 | 営業 | takahashi@example.com |
| 中村 美咲 | 企画 | nakamura@example.com |
| 小林 翔 | 開発 | kobayashi@example.com |
| 伊藤 誠 | 営業 | ito@example.com |
| 渡辺 愛 | 企画 | watanabe@example.com |
| 加藤 大輔 | 開発 | kato@example.com |
| 吉田 直樹 | 営業 | yoshida@example.com |
コードをコピーして使おう!
PHPファイルとCSVファイルを同じフォルダへ配置してください。
プルダウンで部署を選択すると、該当するデータだけを絞り込み表示します。
<?php
$rows = [];
if (($fp = fopen('data.csv', 'r')) !== false) {
while (($row = fgetcsv($fp)) !== false) {
$rows[] = $row;
}
fclose($fp);
}
$departments = [];
foreach ($rows as $row) {
if (!empty($row[1])) {
$departments[$row[1]] = true;
}
}
$selected = $_GET['department'] ?? '';
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>CSVデータ絞り込み</title>
<style>
body{
font-family:sans-serif;
margin:20px;
}
.filter-wrap{
border:1px solid #e5e7eb;
border-radius:20px;
padding:24px;
}
.filter-form{
margin-bottom:20px;
}
select{
padding:10px 12px;
border:1px solid #d1d5db;
border-radius:10px;
min-width:180px;
}
.count-box{
margin-bottom:20px;
padding:16px;
background:#f8fafc;
border:1px solid #e5e7eb;
border-radius:12px;
font-weight:700;
}
table{
width:100%;
border-collapse:collapse;
}
th,
td{
border:1px solid #e5e7eb;
padding:10px;
text-align:left;
}
th{
background:#f8fafc;
}
</style>
</head>
<body>
<div class="filter-wrap">
<form method="get" class="filter-form">
<select name="department" onchange="this.form.submit()">
<option value="">すべて表示</option>
<?php foreach(array_keys($departments) as $department): ?>
<option
value="<?= htmlspecialchars($department,ENT_QUOTES,'UTF-8') ?>"
<?= $selected === $department ? 'selected' : '' ?>>
<?= htmlspecialchars($department,ENT_QUOTES,'UTF-8') ?>
</option>
<?php endforeach; ?>
</select>
</form>
<div class="count-box">
CSVデータ件数:
<?php
$count = 0;
foreach ($rows as $row) {
if ($selected === '' || $row[1] === $selected) {
$count++;
}
}
echo $count;
?>
件
</div>
<table>
<tr>
<th>氏名</th>
<th>部署</th>
<th>メールアドレス</th>
</tr>
<?php foreach($rows as $row): ?>
<?php
if (
$selected !== '' &&
$row[1] !== $selected
){
continue;
}
?>
<tr>
<td><?= htmlspecialchars($row[0],ENT_QUOTES,'UTF-8') ?></td>
<td><?= htmlspecialchars($row[1],ENT_QUOTES,'UTF-8') ?></td>
<td><?= htmlspecialchars($row[2],ENT_QUOTES,'UTF-8') ?></td>
</tr>
<?php endforeach; ?>
</table>
</div>
</body>
</html>
ファイル構成と設置方法
このサンプルで使用するファイル構成です。
index.php と data.csv を同じフォルダ(同じ階層)へ配置してください。
sample
├─ index.php
└─ data.csv
data.csv に登録されているデータを読み込み、部署ごとに絞り込み表示します。プルダウンで部署を選択すると、該当するデータのみ表示されます。また、絞り込み後の件数も自動で表示されます。
サーバーへ設置する場合は、上記ファイルを同じフォルダへアップロードしてください。
PHPはサーバー上で実行されるため、PHPファイルをダブルクリックしても動作しません。動作確認はレンタルサーバーへアップロードするか、PHPが利用できるローカル環境で行ってください。
コメント