如何从 URL 获取所有 GET 值? (缺失值)

How do I get all GET values from a URL? (Missing Values)

我正在遍历 GET 值,只得到 13 个值,无论我提交什么 URL。此外,它没有按顺序获取值...

当我遍历时,我只得到 13 个值,当我在 $_GET 本身上使用 var_dump 时也是如此;即使有更多的值要检索。

这是 URL:

网站.com/Questionaire.php?SurveyName=TV%20Quiz&SurveyType=MultipleChoice&Q1=Choose%20a%20character%20off%20of%20Happy%20Days?&A1=Benny%20the%20bull&A2=The %20Fonz&A3=Jack%20Cracker&Q3=Favorite%20Friends%20character?&A1=Ross&A2=Monica&A4=Joey&A5=Rachel&A6=Chandler&A7=Phoebe&Q8=Favorite%20Nickelodeon%20show?&A1=Hey%20Arnold!&A2=Rugrats&A8!=AhRehals%20Rehals =14=]

这是我的结果:

SurveyName: TV Quiz

SurveyType: MultipleChoice

Q1: Choose a character off of Happy Days?

A1: Hey Arnold!

A2: Rugrats

A3: Jack Cracker

Q3: Favorite Friends character?

A4: Joey

A5: Rachel

A6: Chandler

A7: Phoebe

Q8: Favorite Nickelodeon show?

A8: Ahhhh! Real Montsters

如您所见,结果没有按顺序排列,甚至缺少一些值。

var_dump($_GET);

foreach ($_GET as $key => $value) { 
    echo $key.": ".$value."<br/>\n";
}

我期望这些结果:

SurveyName=TV Quiz

SurveyType=MultipleChoice

Q1=Choose a character off of Happy Days?

A1=Benny the bull //<- missed

A2=The Fonz //<- missed

A3=Jack Cracker

Q3=Favorite Friends character?

A1=Ross //<- missed

A2=Monica //<- missed

A4=Joey

A5=Rachel

A6=Chandler

A7=Phoebe

Q8=Favorite Nickelodeon show?

A1=Hey Arnold!

A2=Rugrats

A8=Ahhhh! Real Montsters

查询字符串中不能有相同的参数名称,否则最后一个值将覆盖之前的值。您需要有唯一的答案名称,否则您将丢失数据。您可以想象 PHP 使用以下伪代码将参数添加到 $_GET

foreach($param as $key=>$val) {
    $_GET[$key] = $val;
}

因此,参数按照它们在请求中首次出现的顺序出现。所以查询字符串 ?A=1&B=2&A=3&C=4 将首先出现 A,然后是 B,最后是 C。相同参数的最后一个值是使用的值,因此我们得到以下 $_GET 结果:

array(
    'A'=>3,
    'B'=>2,
    'C'=>4
);

考虑将问题标识符添加为每个答案的前缀。例如,将 A1 改为 Q1A1Q2A1。这将确保您的数据不被覆盖。

我建议对查询字符串参数名称使用数组表示法,以便保持顺序。类似于:

?SurveyName=TV Quiz
&SurveyType=MultipleChoice
&Q[1]=Choose a character off of Happy Days?
&A[1][1]=Benny the bull
&A[1][2]=The Fonz
&A[1][3]=Jack Cracker
&Q[3]=Favorite Friends character?
&A[3][1]=Ross
&A[3][2]=Monica
&A[3][4]=Joey
&A[3][5]=Rachel
&A[3][6]=Chandler
&A[3][7]=Phoebe
&Q[8]=Favorite Nickelodeon show?
&A[8][1]=Hey Arnold!
&A[8][2]=Rugrats
&A[8][8]=Ahhhh! Real Montsters

当您这样命名查询字符串参数时,PHP 会将它们解析为数组:

array(4) {
  ["SurveyName"]=>
  string(7) "TV Quiz"
  ["SurveyType"]=>
  string(14) "MultipleChoice"
  ["Q"]=>
  array(3) {
    [1]=>
    string(37) "Choose a character off of Happy Days?"
    [3]=>
    string(27) "Favorite Friends character?"
    [8]=>
    string(26) "Favorite Nickelodeon show?"
  }
  ["A"]=>
  array(3) {
    [1]=>
    array(3) {
      [1]=>
      string(14) "Benny the bull"
      [2]=>
      string(8) "The Fonz"
      [3]=>
      string(12) "Jack Cracker"
    }
    [3]=>
    array(6) {
      [1]=>
      string(4) "Ross"
      [2]=>
      string(6) "Monica"
      [4]=>
      string(4) "Joey"
      [5]=>
      string(6) "Rachel"
      [6]=>
      string(8) "Chandler"
      [7]=>
      string(6) "Phoebe"
    }
    [8]=>
    array(3) {
      [1]=>
      string(11) "Hey Arnold!"
      [2]=>
      string(7) "Rugrats"
      [8]=>
      string(21) "Ahhhh! Real Montsters"
    }
  }
}