有没有办法让关闭 Submitting a multidimensional array via POST with php的PHP功能?
因此提交<input type="text" name="variable[0][1]" value="..." />
会产生$_POST
,就像这样...
array (
["variable[0][1]"] => "...",
)
不喜欢这样:
array (
["variable"] => array(
[0] => array (
[1] => "..."
),
),
)
我正在考虑/希望一个不起眼的PHP.ini指令或其他东西......?
答案 0 :(得分:2)
不,但没有什么可以阻止你获取查询字符串(通过$_SERVER['QUERY_STRING']
)并手动解析它。例如:
$myGET = array();
foreach (explode("&", $_SERVER['QUERY_STRING']) as $v) {
if (preg_match('/^([^=])+(?:=(.*))?$/', $v, $matches)) {
$myGET[urldecode($matches[1])] = urldecode($matches[2]);
}
}
答案 1 :(得分:0)
我不应该这么认为。你究竟想做什么?
例如,您可以使用变量(0)(1)或variable_0_1作为名称。
答案 2 :(得分:0)
不要相信你能做到这一点。我也不明白为什么你需要。但这应该有效:
$_POST['variable'] = array(array('abc','def'),array('ddd','ggg'));
print_r(flatPost('variable'));
function flatPost($var)
{
return enforceString($_POST[$var], $var);
}
function enforceString($data, $preKey = '')
{
if(!is_array($data))
{
return array($preKey . $data);
}
$newData = array();
foreach($data as $key => &$value)
{
$element = enforceString($value, $preKey . '[' . $key . ']');
$newData = array_merge($newData, $element);
}
return $newData;
}
答案 3 :(得分:0)
它有点超过顶部,但如果有必要,您可以手动解析请求正文。
<?php
if(!empty($_POST) && $_SERVER['CONTENT_TYPE'] == 'application/x-www-form-urlencoded') {
$_post = array();
$queryString = file_get_contents('php://input'); // read the request body
$queryString = explode('&', $queryString); // since the request body is a query string, split it on '&'
// and you have key-value pairs, delimited by '='
foreach($queryString as $param) {
$params = explode('=', $param);
if(array_key_exists(0, $params)) {
$params[0] = urldecode($params[0]);
}
if(array_key_exists(1, $params)) {
$params[1] = urldecode($params[1]);
}
else {
$params[1] = urldecode('');
}
$_post[$params[0]] = $params[1];
}
$_POST = $_post;
}
?>