PHPでCSVデータを絞り込み表示する方法【サンプルコード付き】

php

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


コメント