PHPでURLのパラメータによって表示を分ける
それぞれ以下のURLでアクセスしたときに表示を分ける。
https://domain.com/
(全記事表示)https://domain.com/?id=xx
(個別記事表示)https://domain.com/?cat=xxx
(カテゴリ別記事表示)
記事データはXML形式のものをjson形式に変換している。変換についてはPHPでXML形式から配列に変換する参照。
<?xml version="1.0" encoding="UTF-8"?><articles> <article> <id>1</id> <date>2024/09/27 09:00:00</date> <comment>やっぱりきょうもねむい</comment> <cat>nemui</cat> </article> <article> <id>2</id> <date>2024/09/26 09:00:00</date> <comment>きょうもすごくねむい</comment> <cat>nemui</cat> </article> <article> <id>3</id> <date>2024/09/25 09:00:00</date> <comment>きょうもねむい</comment> </article></articles>
処理は一度foreach
を回し、その中で条件分岐させる。
//ディレクトリパス以下を取得$path = $_SERVER['REQUEST_URI'];
foreach($json as $article => $values):
//パラメータによる分岐($valuesの中身を以下条件によって変更する) if(str_contains($path, '?id=')) { //?id=で個別表示 $values = array_filter($values, function($f) { $g_id = $_GET['id']; return $f['id'] == $g_id; }); } elseif(str_contains($path, '?cat=')) { //?cat=でタグ表示 $values = array_filter($values, function($f) { $g_cat = $_GET['cat']; return $f['cat'] == $g_cat; }); $values = array_values($values); //index振り直し }
foreach($values as $key => $value): var_dump($value); }
}
?id=1
では指定したID1の記事が、?cat=nemui
ではカテゴリ指定のあるID1,2の記事が抽出される。