PHPでURLのパラメータによって表示を分ける

それぞれ以下のURLでアクセスしたときに表示を分ける。

  • https://domain.com/(全記事表示)
  • https://domain.com/?id=xx(個別記事表示)
  • https://domain.com/?cat=xxx(カテゴリ別記事表示)

記事データはXML形式のものをjson形式に変換している。変換についてはPHPでXML形式から配列に変換する参照。

sample.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の記事が抽出される。