https://example.com/?fruit=apple&color=red
のような URL の中から、GET パラメータ(?fruit=apple&color=red
)だけを解析して、下記のような配列の形に整形する方法を紹介します。
[
"fruit" => "apple",
"color" => "red"
]
parse_url() で URL をパース(解析)する
parse_url()
を使うと、URL からホスト名、ポート番号、クエリ(GET パラメータ)、ハッシュ値などを連想配列に変換できます。
$url = 'https://example.com/?fruit=apple&color=red';
$parsed_url = parse_url($url);
公式リファレンスを見ると分かりますが、$parsed_url
にはhost
、port
、query
などの 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://example.com/?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://example.com/?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()
で第二引数に変数を指定するのがすこし分かりにくいので好きではないですが、他にいいやり方が見つからなかったのでこちらで対応しました。