我需要像下面一样拿一个数组:
$subids = Array
(
[s1] => one
[s2] => two
[s3] => three
[s4] => four
[s5] => five
[s6] => six
)
并生成诸如http://example.com?s1=one&s2=two&s3=three=&s4=four&s5=five&s6=six
之类的网址并非总是定义所有子标识,因此有时可能未定义s3,因此不应将其附加到URL。另外,无论第一个subid是什么,它必须有?在它之前而不是&符号(&)
所以如果数组只是:
$subids = Array
(
[s2] => two
[s6] => six
)
然后网址必须为http://example.com?s2=two&s6=six
到目前为止,我有以下内容:
$ url ='http://example.com'
foreach ($subids AS $key => $value) {
$result[$id]['url'] .= '&' . $key . '=' . $value;
}
但是,我不确定追加的最佳方式是什么?在第一个键/值对的开头。
我觉得有一个PHP函数可以帮助解决这个问题,但我找不到多少。我正在使用Codeigniter,如果我可以使用CI提供的任何内容。
答案 0 :(得分:110)
您所需要的只是http_build_query:
$final = $url . "?" . http_build_query($subids);
答案 1 :(得分:15)
您可以使用http_build_query()
功能。
来自php.net的例子:
<?php
$data = array(
'foo' => 'bar',
'baz' => 'boom',
'cow' => 'milk',
'php' => 'hypertext processor',
);
echo http_build_query( $data ) . "\n";
echo http_build_query( $data, '', '&' );
?>
输出这一行:
foo=bar&baz=boom&cow=milk&php=hypertext+processor
foo=bar&baz=boom&cow=milk&php=hypertext+processor
您可以从来源阅读:http://www.php.net/manual/en/function.http-build-query.php
BTW,如果你使用WordPress,你可以使用这个功能:http://codex.wordpress.org/Function_Reference/add_query_arg
玩得开心。 :)
答案 2 :(得分:0)
您可以使用http_build_query()函数,但是如果URL来自外部函数,请确保进行一些验证。
$url = getUrlSomewhere();
$params = ['param' => 'value', 'param2' => 'value2'];
$queryParams = http_build_query($params);
if (strpos($url, '?') !== FALSE) {
$url .= '&'. $queryParams;
} else {
$url .= '?'. $queryParams;
}
如果您具有PECL扩展名,则可以使用http_build_url(),如果您正在向已有的URL中添加更多参数或没有添加其他参数,则可以使用{{3}}。