簡體   English   中英

在 URL 中傳遞不帶 [] 的 $_GET 關聯數組(非常短的 PHP 問題)

[英]passing $_GET associative array without [] in the URL (very short PHP question)

這一定是一個新手問題,但是......

How can I achieve $_GET['i'] array from URL "index.php?i=1&i=2&i3" instead of "index.php?i[]=1&i[]=2&i[]=3"?

PHP 無法自動將index?i=1&i=2&i=3轉換為數組變量。 您將不得不手動解析它並自己構建一個數組。

preg_match_all('/(\w+)=([^&]*)/', $_SERVER["QUERY_STRING"], $match, PREG_SET_ORDER);
$_GET = array();
foreach ($match as $row) {
    list(, $key, $value) = $row;
    $_GET[$key][] = urldecode($value);
}

請注意,這會干擾常規的 URL 參數。 如果要保留正常行為,則必須使用更復雜的方法。

雖然 HTTP 標准不禁止這樣做,但 PHP 不支持開箱即用。 你必須自己做:

$q = 'a=1&a=2&a=3&b=1';

$vars = array();
foreach (explode('&', $q) as $part) {
    list($var, $value) = explode('=', $part, 2);
    $uvar = urldecode($var);
    if (isset($vars[$uvar])) {
        if (!is_array($vars[$uvar])) $vars[$uvar] = array($vars[$uvar]);
        $vars[$uvar][] = urldecode($value);
    } else {
        $vars[$uvar] = urldecode($value);
    }
}

print_r($vars);

輸出:

Array
(
    [a] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

    [b] => 1
)

只需將$q替換為$_SERVER['QUERY_STRING']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM