【问题标题】:Turning off multidimensional arrays via POST in PHP在 PHP 中通过 POST 关闭多维数组
【发布时间】:2011-04-05 07:11:54
【问题描述】:

有没有办法关闭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 指令或其他什么...?

【问题讨论】:

    标签: php forms post multidimensional-array submit


    【解决方案1】:

    不,但没有什么能阻止您获取查询字符串(通过$_SERVER['QUERY_STRING'])并手动解析它。例如:

    $myGET = array();
    foreach (explode("&", $_SERVER['QUERY_STRING']) as $v) {
        if (preg_match('/^([^=])+(?:=(.*))?$/', $v, $matches)) {
            $myGET[urldecode($matches[1])] = urldecode($matches[2]);
        }
    }
    

    【讨论】:

      【解决方案2】:

      我不应该这么认为。你到底想做什么?

      例如,您可以使用 variable(0)(1) 或 variable_0_1 作为名称。

      【讨论】:

        【解决方案3】:

        不要相信你能做到。我也不明白你为什么需要。但这应该可行:

        $_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;
        }
        

        【讨论】:

          【解决方案4】:

          这有点过头了,但如有必要,您可以手动解析请求正文。

          <?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;
              }
          ?>
          

          【讨论】:

            猜你喜欢
            • 2020-10-08
            • 2012-12-04
            • 2011-01-26
            • 1970-01-01
            • 2016-07-25
            • 1970-01-01
            • 2019-09-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多