PHPでCSV複数条件検索をする方法【サンプルコード付き】
PHPでCSVファイルの複数条件検索をする方法を紹介します。氏名・部署・日付など複数の条件を組み合わせてCSVデータを絞り込み表示できます。顧客管理、売上管理、会員一覧検索など、条件を指定して必要なデータだけを表示したい場合に使えるサンプルコードです。
コードについて
本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
CSVデータ件数:10件
| 氏名 | 部署 | 金額 |
|---|---|---|
| 山田 太郎 | 営業 | 12,000円 |
| 佐藤 花子 | 企画 | 8,500円 |
| 鈴木 一郎 | 開発 | 15,200円 |
| 田中 美咲 | 営業 | 9,800円 |
| 高橋 健 | 企画 | 21,000円 |
| 伊藤 誠 | 開発 | 7,300円 |
| 吉田 直樹 | 営業 | 11,500円 |
| 中村 翔 | 企画 | 13,400円 |
| 小林 彩 | 開発 | 10,600円 |
| 松本 翼 | 営業 | 18,900円 |
コードをコピーして使おう!
<?php
$rows = [];
if (($fp = fopen('data.csv', 'r')) !== false) {
while (($row = fgetcsv($fp)) !== false) {
$rows[] = $row;
}
fclose($fp);
}
$name = $_GET['name'] ?? '';
$department = $_GET['department'] ?? '';
$minPrice = $_GET['min_price'] ?? '';
$resultRows = [];
foreach ($rows as $row) {
$rowName = $row[0] ?? '';
$rowDepartment = $row[1] ?? '';
$rowPrice = (int)($row[2] ?? 0);
$matchName =
$name === '' ||
mb_strpos($rowName, $name) !== false;
$matchDepartment =
$department === '' ||
$rowDepartment === $department;
$matchPrice =
$minPrice === '' ||
$rowPrice >= (int)$minPrice;
if (
$matchName &&
$matchDepartment &&
$matchPrice
) {
$resultRows[] = $row;
}
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSV複数条件検索</title>
<style>
.search-wrap{
border:1px solid #e5e7eb;
border-radius:20px;
padding:24px;
background:#fff;
}
.search-form{
display:flex;
gap:12px;
flex-wrap:wrap;
align-items:end;
margin-bottom:20px;
}
.field{
display:flex;
flex-direction:column;
gap:6px;
width:220px;
}
label{
font-weight:700;
}
input,
select{
width:100%;
box-sizing:border-box;
padding:10px 12px;
border:1px solid #d1d5db;
border-radius:10px;
}
button{
height:42px;
padding:0 18px;
border:none;
border-radius:10px;
background:#0b6bff;
color:#fff;
cursor:pointer;
}
.count-box{
margin-bottom:20px;
padding:18px;
border:1px solid #e5e7eb;
border-radius:14px;
background:#f8fafc;
font-size:20px;
font-weight:700;
}
table{
width:100%;
border-collapse:collapse;
}
th,
td{
border:1px solid #e5e7eb;
padding:12px;
text-align:left;
}
th{
background:#f8fafc;
}
</style>
</head>
<body>
<div class="search-wrap">
<form method="get" class="search-form">
<div class="field">
<label>氏名</label>
<input
type="text"
name="name"
value="<?= htmlspecialchars($name, ENT_QUOTES, 'UTF-8') ?>"
placeholder="例:山田">
</div>
<div class="field">
<label>部署</label>
<select name="department">
<option value="">すべて</option>
<option value="営業" <?= $department === '営業' ? 'selected' : '' ?>>営業</option>
<option value="企画" <?= $department === '企画' ? 'selected' : '' ?>>企画</option>
<option value="開発" <?= $department === '開発' ? 'selected' : '' ?>>開発</option>
</select>
</div>
<div class="field">
<label>金額以上</label>
<input
type="number"
name="min_price"
value="<?= htmlspecialchars($minPrice, ENT_QUOTES, 'UTF-8') ?>"
placeholder="例:10000">
</div>
<button type="submit">
検索
</button>
</form>
<div class="count-box">
CSVデータ件数:<?= count($resultRows) ?>件
</div>
<table>
<thead>
<tr>
<th>氏名</th>
<th>部署</th>
<th>金額</th>
</tr>
</thead>
<tbody>
<?php foreach ($resultRows as $row): ?>
<tr>
<td><?= htmlspecialchars($row[0] ?? '', ENT_QUOTES, 'UTF-8') ?></td>
<td><?= htmlspecialchars($row[1] ?? '', ENT_QUOTES, 'UTF-8') ?></td>
<td><?= number_format((int)($row[2] ?? 0)) ?>円</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</body>
</html>
ファイル構成と設置方法
このサンプルで使用するファイル構成です。
下記のファイルを同じフォルダ(同じ階層)へ配置してください。
sample/
├─ index.php
└─ data.csv
data.csvに登録された氏名・部署・金額を読み込み、複数条件で絞り込み検索を行います。氏名の部分一致検索、部署の選択、金額以上の条件を組み合わせてデータを抽出できます。検索結果に一致した件数も自動で表示されます。
サーバーへ設置する場合は、上記ファイルを同じフォルダ(同じ階層)へアップロードしてください。別フォルダへ配置する場合は、コード内のCSVファイルパスを変更してください。
PHPはサーバー上で実行されるため、PHPファイルをダブルクリックしても動作しません。動作確認はレンタルサーバーへアップロードするか、PHPが利用できるローカル環境で行ってください。
コメント