72

我需要像下面这样的数组:

$subids = Array
    (
        [s1] => one
        [s2] => two
        [s3] => three
        [s4] => four
        [s5] => five
        [s6] => six
    )

并生成一个 URL,例如http://example.com?s1=one&s2=two&s3=three=&s4=four&s5=five&s6=six

并非总是定义所有子 ID,因此有时 s3 可能未定义,因此不应将其附加到 URL。此外,无论第一个 subid 是什么,它都必须有 ? 在它之前而不是与号 (&)

所以如果数组只是:

$subids = Array
    (
        [s2] => two
        [s6] => six
    )

那么 URL 需要是http://example.com?s2=two&s6=six

到目前为止,我有以下内容:

$url = ' http://example.com '

    foreach ($subids AS $key => $value) {
        $result[$id]['url'] .= '&' . $key . '=' . $value;
    }

但是,我不确定附加 ? 在第一个键/值对的开头。

我觉得有一个 PHP 函数可以帮助解决这个问题,但我没有找到太多。如果 CI 提供了我可以使用的任何东西,我正在使用 Codeigniter。

4

3 回答 3

172

您只需要http_build_query

$final = $url . "?" . http_build_query($subids);
于 2012-11-07T18:57:51.747 回答
18

您可以使用 withhttp_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, '', '&amp;' );
?>

并输出以下行:

foo=bar&baz=boom&cow=milk&php=hypertext+processor
foo=bar&amp;baz=boom&amp;cow=milk&amp;php=hypertext+processor

您可以从源代码中阅读:http ://www.php.net/manual/en/function.http-build-query.php

顺便说一句,如果您使用 WordPress,您可以使用此功能:http ://codex.wordpress.org/Function_Reference/add_query_arg

玩得开心。:)

于 2012-11-07T18:59:43.203 回答
1

您可以使用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 添加更多参数,或者没有其他验证。

于 2020-04-01T03:41:18.057 回答