1. 導入: なぜ検索条件の解除機能が重要なのか
Webアプリケーションの検索機能において、ユーザーが絞り込み条件を適用した後に「特定の条件だけを解除したい」というニーズは非常に一般的です。UXの観点からも、現在の検索条件をリスト表示し、個別に削除できるUIは利便性が高いものです。しかし、PHPでGETパラメータ(特に配列形式のパラメータ)を柔軟に操作しようとすると、多次元配列の構造を維持したまま特定の値だけを取り除く処理に意外と手間取ることがあります。今回は、この課題をスマートに解決するための実装方法を解説します。
2. 基礎知識: 配列操作の仕組み
PHPで検索条件を管理する場合、$_GET変数をそのまま使うのではなく、一度別の配列($requestsなど)にサニタイズして格納するのが基本です。ここから特定の値を削除する際、単純な unset 関数だけでは、多次元配列(例: options[0], options[1]…)の特定の要素を指定して削除するのが困難です。そこで、ドット記法(例: “options.0″)を用いてキーを指定し、参照渡し(&)を活用して再帰的、あるいは反復的に配列を辿り、対象の要素を削除する設計が有効になります。
3. 実装/解決策: 汎用的な削除関数の活用
今回紹介する手法では、配列のキーをドットで連結した文字列から、対象の要素を安全に取り除く関数を作成します。この関数を使うことで、現在のクエリパラメータの状態を保持したまま、特定の条件だけを除去した新しいURLを http_build_query 関数で再生成することができます。これにより、複雑な if 文のネストを避け、スッキリとしたコードでリンクを生成可能です。
4. サンプルプログラム
以下のコードは、検索条件を動的に構築し、各条件の横に「削除リンク」を生成する実用的なサンプルです。
/
function array_unset($array, $path, $separator = ‘.’) {
$keys = explode($separator, $path);
$current = &$array;
$parent = &$array;
foreach ($keys as $i => $key) {
if (!array_key_exists($key, $current)) return $array;
// 親の参照を保持しながら深掘りしていく
if ($i) $parent = &$current;
$current = &$current[$key];
}
// 最後に到達したキーを削除
unset($parent[$key]);
return $array;
}
// サンプルデータ: GETパラメータから取得した想定
$requests = [
‘q’ => ‘PHP’,
‘options’ => [‘A’, ‘B’]
];
?>
-
$value): ?>
-
“>
[削除]
-
5. 応用・注意点: 現場で役立つポイント・セキュリティ対策: ユーザーからの入力をURLパラメータとして出力するため、必ず htmlspecialchars などのエスケープ処理を忘れずに行ってください。
・空配列の扱い: 配列の中身をすべて削除した場合、空の配列がパラメータとして残ることがあります。必要に応じて、array_filter を使用して空の値を最終的に除外する処理を加えると、URLがより美しくなります。
・複雑な構造: もし検索条件が非常に深い階層を持つ場合は、参照渡しだけでなく、再帰的な関数構造にすることで、より柔軟な階層操作が可能になります。状況に応じてこの関数をライブラリ化しておくと、プロジェクト全体で再利用しやすくなります。
$val): ?>