2011-05-03 36 views
1

PHP的一个很大的特点是,它在处理请求变量数组,所以如果你喜欢后一个...&test[one]=two&test[three]=four字符串,那么你可以通过使用$_REQUEST['test']访问test作为数组。

但是我今天发现,有一个与多维数组$_REQUEST一个问题,我想知道是否有办法解决它。

为了测试,我使用的字段的形式:

<input name="one[one]" /> 
<input name="one[two]" /> 
<input name="three[four[five]]" /> 
<input name="three[four[six]]" /> 

一旦这被提交,我用var_dump看到阵列结构:

array(3) { 
    ["one"]=> 
    array(2) { 
    ["one"]=> 
    string(0) "" 
    ["two"]=> 
    string(0) "" 
    } 
    ["three"]=> 
    array(2) { 
    ["four[five"]=> 
    string(0) "" 
    ["four[six"]=> 
    string(0) "" 
    } 
} 

one元件是阵列指明分数如预期。但是three元素不是。现在我不介意它是否不被支持,但是让我感到困惑的是原因。看看three - four[fivefour[six的子元素的名称。它不被解释为一个数组,因为由于某种原因,尾随]这将有助于将这些元素识别为数组值,已经失去了!

没有人有这个解释?有没有办法解决这个问题,除了在$_REQUEST阵列中最多使用一个级别?

+1

请停止使用$ _REQUEST。这是有害的。 – 2011-05-03 22:20:44

+0

@特雷斯科:请停止发布。这是不正确的。 – mario 2011-05-03 22:31:45

回答

5

尝试three[four][five]three[four][six]代替。

+0

我真是个白痴!谢谢。 – user700774 2011-05-03 22:49:06

+0

我仍然不明白为什么后面的']'虽然下降了。 – user700774 2011-05-03 22:49:32

+0

显然这是由于PHP如何解析字符串。究竟是为什么,我不知道。这不是我认为值得我打开PHP源代码的东西。只需使用正确的格式,并注意字段名称中的点。见http://www.php.net/manual/en/language.variables.external.php – simshaun 2011-05-03 22:56:50

0

输入名称完全对应于变量“名称”。

你会用PHP编写:

$three['four']['five'] = 'trees'; 

同样,在你的HTML:

<input name="three[four][five]" value="trees" />