この記事を三行にまとめると
http_build_queryに関するお話値を空にして送信したい場合
「''」を使えってことですね
http_build_queryで配列からクエリ文字列を作成する場合の話です。
普通はこんな感じになる。
ではここで値を空にして送信したい場合、どのパターンならいけるか。「false」「null」「”」「array()」の4パターンに対してhttp_buil_queryを使うとこんなクエリ文字になります。
nullやarray()はクエリ文字から除外されてしまいます。falseはブール代数的に0なので0になる。だからキーだけ渡したい場合は「”」を使えってことですね。
ちょいおまけの話。
curlを使って多次元配列のデータをPOSTする際、データが「Array」という文字列になってしまうことがあるかと思います。
こういうときは「key2[aaa]」みたい明示的なキーの書き方をしてのも良いのですが、配列が複雑になる可能性があるならhttp_build_queryを使う方が手っ取り早いと思います。
普通はこんな感じになる。
$array = array(
'key1' => 'value1',
'key2' => 'value2',
);
$query = http_build_query($array);
echo $query;
//生成されるクエリ
key1=value1&key2=value2
ではここで値を空にして送信したい場合、どのパターンならいけるか。「false」「null」「”」「array()」の4パターンに対してhttp_buil_queryを使うとこんなクエリ文字になります。
$array = array(
'key1' => false,
'key2' => null,
'key3' => '',
'key4' => array(),
);
$query = http_build_query($array);
echo $query;
//生成されるクエリ
key1=0&key3=
nullやarray()はクエリ文字から除外されてしまいます。falseはブール代数的に0なので0になる。だからキーだけ渡したい場合は「”」を使えってことですね。
ちょいおまけの話。
curlを使って多次元配列のデータをPOSTする際、データが「Array」という文字列になってしまうことがあるかと思います。
$post = array(
'key1' => 'value1',
'key2' => array('aaa', 'bbb'),
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_URL, '送信先のURL');
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_exec($ch);
curl_close($ch);
//key2のArrayが文字列になっている
Array(
[key1] => value1
[key2] => Array
)
こういうときは「key2[aaa]」みたい明示的なキーの書き方をしてのも良いのですが、配列が複雑になる可能性があるならhttp_build_queryを使う方が手っ取り早いと思います。
//明示的に書く場合
$post = array(
'key1' => 'value1',
'key2[aaa]' => 'bbb',
);
//http_build_queryを使う場合
$post = array(
'key1' => 'value1',
'key2' => array('aaa' => 'bbb'),
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_URL, '送信先のURL');
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
curl_exec($ch);
curl_close($ch);
//key2の中身も配列になっている
Array(
[key1] => value1
[key2] => Array(
[aaa] => bbb
)
)