PHPでCSV複数条件検索をする方法【サンプルコード付き】

php

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が利用できるローカル環境で行ってください。


コメント