【PHP】URLを解析してGETパラメータを配列に変換する

  • PHP

https://sample.jp/?fruit=apple&color=redのような URL の中から、GET パラメータ(?fruit=apple&color=red)だけを解析して、下記のような配列の形に整形する方法を紹介します。

[
  "fruit" => "apple",
  "color" => "red"
]

parse_url() で URL をパース(解析)する

parse_url()を使うと、URL からホスト名、ポート番号、クエリ(GET パラメータ)、ハッシュ値などを連想配列に変換できます。

$url = 'https://sample.jp/?fruit=apple&color=red';
$parsed_url = parse_url($url);

公式リファレンスを見ると分かりますが、$parsed_urlにはhostportqueryなどの URL データが連想配列で入っているはずです。

今回の例だと、下記のような感じ。

array(4) {
  ["scheme"]=>
  string(5) "https"
  ["host"]=>
  string(9) "sample.jp"
  ["path"]=>
  string(1) "/"
  ["query"]=>
  string(21) "fruit=apple&color=red"
}

パースした URL から GET パラメータを取得する

今回は GET パラメータを取得したいので、

$parsed_url['query']

で取得することができます。が…

実は第二引数に定数を指定すると、指定したものだけを抽出することができます。今回は GET パラメータの情報だけほしいので、PHP_URL_QUERYを指定したほうが見通しがよくなりますね。

$url = 'https://sample.jp/?fruit=apple&color=red';
$parsed_query = parse_url($url, PHP_URL_QUERY);

$parsed_queryの中身を見てみると、クエリ文字列が入っています。

string(21) "fruit=apple&color=red"

GET パラメータの文字列を配列に変換する

文字列の状態だと使いにくいので、[key => value]の連想配列に変換します。これにはparse_str()を使います。

$url = 'https://sample.jp/?fruit=apple&color=red';
$parsed_query = parse_url($url, PHP_URL_QUERY);
parse_str($parsed_query, $query_array);

parse_str()は第一引数に文字列を、そして第二引数に結果を格納する変数を指定します。指定しない方法もありますが、推奨されていないようなのできちんと指定しておきましょう。

今回は$query_arrayという変数に格納しました。中身を見てみると、

array(2) {
  ["fruit"]=>
  string(5) "apple"
  ["color"]=>
  string(3) "red"
}

配列になっていますね。

parse_str()で第二引数に変数を指定するのがすこし分かりにくいので好きではないですが、他にいいやり方が見つからなかったのでこちらで対応しました。