jiichan.com

PROGRAMMING

urlのパラメータに配列を使用する

GET送信ではurlにパラメータを付加しますが、パラメータに配列を使用したいときもあります。
配列を使用してGET送信してみました。
ごく普通の配列なし、配列有りでindexが無い場合、配列にindexが付いた場合、混合の場合と試してみました。


<ul>
<li><a href="varDump.php?a=2&b=1&c=3">配列なし</a></li>
<li><a href="varDump.php?ary[]=2&ary[]=1&ary[]=3">配列あり(index無し)</a></li>
<li><a href="varDump.php?ary[3]=2&ary[1]=1&ary[2]=3">配列あり(index有り)</a></li>
<li><a href="varDump.php?a=2&b=1&c=3&ary[3]=2&ary[1]=1&ary[2]=3">混合</a></li>
</ul>

echo "<p>var_dumpの結果</p>"
var_dump($_GET)."<br>"; 

echo "<p>foreachの結果</p>"
foreach ($_GET as $key => $value) {
	// 要素が配列の場合、その子要素を取得
	if(is_array($_GET[$key])) {
		foreach ($_GET[$key] as $key2 => $value2) {
			echo $key."[".$key2."] = ".$value2."<br>"; 
		}
	}else{
		echo  $key." = ".$value."<br>";
	}
}

次からのvar_dumpの各出力結果は見やすいように改行とインデントを入れてあります。

配列を使用しない場合

そもそもパラメータはGETに配列の形で格納されているので、結果はa,b,c3個の要素を持った連想配列になっていた。


◎var_dumpの結果
array(3) { 
	["a"]=> string(1) "2" 
	["b"]=> string(1) "1" 
	["c"]=> string(1) "3" 
}

◎foreachの結果
a = 2
b = 1
c = 3

配列をindex無しで使用した場合

GETの大元の配列の要素として、配列名aryができている。そして0から順番にインデックスが振られていた。


◎var_dumpの結果
array(1) {
	["ary"]=> array(3) {
		[0]=> string(1) "2"
		[1]=> string(1) "1"
		[2]=> string(1) "3"
	} 
}

◎foreachの結果
ary[0] = 2
ary[1] = 1
ary[2] = 3

配列をindex有りで使用した場合

インデックスを付けた順番がそのままにに出力されている。


◎var_dumpの結果
array(1) {
	["ary"]=> array(3) {
		[1]=> string(1) "2"
		[0]=> string(1) "1"
		[2]=> string(1) "3"
	}
}

◎foreachの結果
ary[1] = 2
ary[0] = 1
ary[2] = 3

通常のパラメータと配列を混合した場合

4個の要素のうちの一つが配列aryになっている。


◎var_dumpの結果
array(4) {
	["a"]=> string(1) "2"
	["b"]=> string(1) "1"
	["c"]=> string(1) "3"
	["ary"]=> array(3) {
		[1]=> string(1) "2"
		[0]=> string(1) "1"
		[2]=> string(1) "3"
	}
}

◎foreachの結果
a = 2
b = 1
c = 3
ary[1] = 2
ary[0] = 1
ary[2] = 3

グラフを利用するページを作っていて、月ごとの値をGETで渡す必要があり試してみました。
グラフのPHPに下記のjavascriptで配列を文字列に直してGET送信していました。


var ary = [3, 2, 5];
var arrayStr = "";
for(var i = 0; i < 3; i++){
	arrayStr += "ary[]=" + ary[i] + "&";
}
arrayStr = arrayStr.substr(0, arrayStr.length-1);
var htmlStr = "<a href='varDump.php?"+arrayStr+"'>varDump.php</a>";
$("#disp").html(htmlStr);