PHPでCSVソート機能を作る方法
PHPでCSVソート機能を作る方法を紹介します。このサンプルでは、CSVファイルから読み込んだデータを指定した項目で昇順・降順に並び替えて表示できます。CSVファイル自体は変更されず、画面上の表示順だけが切り替わります。商品一覧や会員一覧、売上データなどを見やすく整理して表示したい場合に利用できます。
コードについて
本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
CSVソート
| ID | 名前 |
|---|
コードをコピーして使おう!
<?php
// CSVファイル名です
$csv_file = 'data.csv';
// ソート項目を取得します
$sort = $_GET['sort'] ?? 'id';
// 並び順を取得します
$order = $_GET['order'] ?? 'asc';
// CSVデータを読み込む関数です
function load_csv_data($csv_file) {
$rows = [];
if (!file_exists($csv_file)) {
return $rows;
}
$fp = fopen($csv_file, 'r');
if ($fp) {
// 1行目の見出しを読み飛ばします
fgetcsv($fp);
while (($data = fgetcsv($fp)) !== false) {
if (count($data) >= 2) {
$rows[] = [
'id' => $data[0],
'name' => $data[1]
];
}
}
fclose($fp);
}
return $rows;
}
// CSVデータを読み込みます
$rows = load_csv_data($csv_file);
// 指定された項目で並び替えます
usort($rows, function($a, $b) use ($sort, $order) {
if ($sort === 'name') {
$result = strcmp($a['name'], $b['name']);
} else {
$result = (int)$a['id'] <=> (int)$b['id'];
}
if ($order === 'desc') {
$result *= -1;
}
return $result;
});
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>CSVソート</title>
<style>
body{
font-family:sans-serif;
background:#f8fafc;
margin:40px;
}
.php-csv-sort_wrap{
max-width:800px;
margin:0 auto;
padding:24px;
border:1px solid #e5e7eb;
border-radius:18px;
background:#ffffff;
}
.php-csv-sort_title{
font-size:22px;
font-weight:bold;
margin-bottom:20px;
}
.php-csv-sort_form{
display:flex;
gap:10px;
margin-bottom:16px;
}
.php-csv-sort_select{
flex:1;
height:44px;
padding:0 12px;
border:1px solid #d1d5db;
border-radius:8px;
}
.php-csv-sort_button{
height:44px;
padding:0 20px;
border:none;
border-radius:8px;
background:#0b6bff;
color:#ffffff;
font-weight:bold;
cursor:pointer;
}
.php-csv-sort_table{
width:100%;
border-collapse:collapse;
}
.php-csv-sort_table th,
.php-csv-sort_table td{
border:1px solid #d1d5db;
padding:10px;
text-align:left;
}
.php-csv-sort_table th{
background:#f1f5f9;
}
</style>
</head>
<body>
<div class="php-csv-sort_wrap">
<div class="php-csv-sort_title">
CSVソート
</div>
<form class="php-csv-sort_form" method="get">
<select class="php-csv-sort_select" name="sort">
<option value="id" <?= $sort === 'id' ? 'selected' : '' ?>>ID</option>
<option value="name" <?= $sort === 'name' ? 'selected' : '' ?>>名前</option>
</select>
<select class="php-csv-sort_select" name="order">
<option value="asc" <?= $order === 'asc' ? 'selected' : '' ?>>昇順</option>
<option value="desc" <?= $order === 'desc' ? 'selected' : '' ?>>降順</option>
</select>
<button class="php-csv-sort_button" type="submit">
並び替え
</button>
</form>
<table class="php-csv-sort_table">
<tr>
<th>ID</th>
<th>名前</th>
</tr>
<?php foreach ($rows as $row): ?>
<tr>
<td><?= htmlspecialchars($row['id'], ENT_QUOTES, 'UTF-8') ?></td>
<td><?= htmlspecialchars($row['name'], ENT_QUOTES, 'UTF-8') ?></td>
</tr>
<?php endforeach; ?>
</table>
</div>
</body>
</html>
ファイル構成と設置方法
このサンプルでは、index.php と data.csv を同じフォルダに配置して使用します。CSVファイルを読み込み、指定した項目で昇順・降順に並び替えて画面へ表示できます。CSVファイル自体は変更されません。
sample/
├── index.php
└── data.csv
index.php と data.csv をサーバーへアップロードし、ブラウザから index.php にアクセスしてください。ソート項目や並び順を選択すると、CSVデータの表示順だけが切り替わります。元の data.csv の内容や並び順は変更されません。
コメント