Отключение многомерных массивов через POST в PHP - PullRequest
2 голосов
/ 29 августа 2010

Есть ли способ отключить отключить функциональность PHP для Отправка многомерного массива через POST с php ?

Таким образом, представление <input type="text" name="variable[0][1]" value="..." /> приводит к $_POST примерно так ...

array (
    ["variable[0][1]"] => "...",
)

НЕ так:

array (
    ["variable"] => array(
                          [0] => array (
                                        [1] => "..."
                         ),
    ),
)

Я думаю / надеюсь неясная директива PHP.ini или что-то ...?

Ответы [ 4 ]

2 голосов
/ 29 августа 2010

Нет, но ничто не мешает вам извлечь строку запроса (через $_SERVER['QUERY_STRING']) и проанализировать ее вручную.Например:

$myGET = array();
foreach (explode("&", $_SERVER['QUERY_STRING']) as $v) {
    if (preg_match('/^([^=])+(?:=(.*))?$/', $v, $matches)) {
        $myGET[urldecode($matches[1])] = urldecode($matches[2]);
    }
}
0 голосов
/ 27 октября 2010

Это немного излишне, но при необходимости вы можете вручную проанализировать тело запроса.

<?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;
    }
?>
0 голосов
/ 29 августа 2010

Не верьте, что вы можете это сделать. Я также не понимаю, зачем тебе это нужно. Но это должно работать:

$_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;
}
0 голосов
/ 29 августа 2010

Я не должен думать.Что именно вы пытаетесь сделать?

Вы можете использовать переменную (0) (1) или переменную_0_1 в качестве имен, например.

...