2017-01-18 27 views
-2

假设jQuery的序列化形式发送数据的,这是很难解密:PHP表单名称分解

[someindex][0][anotherindex][0][] = 'value'

在PHP中,我需要把它分解成一个真正的数组,这就是:

array(
    someindex => array(
     0 => array(
      anotherindex => array(
      0 => array('value') 
     ) 
    ) 
    ) 
) 

有没有这样做的功能,或者我该如何实现?

编辑:

另一个词,如果我有$name = '[someindex][0][anotherindex][0][]'作为一个PHP串,我想创建一个相同结构的阵列

样品:http://sandbox.onlinephpfunctions.com/code/5d604f087aab07d48be27969e94dc9656fd90ffd HTML客户端:https://jsfiddle.net/bgay81q2/

JSON客户发送的数据:

[{"name":"Data[index1][0][index2][0][]","value":"test"},{"name":"Data[index1][0][index2][0][]","value":"second value"}] 
+0

不知道我理解你的要求时,它填充'$ _POST'或 –

+4

PHP会自动做什么'$ _GET' – Quentin

+0

它不是PHP或正在发送的正常表单。 JQuery序列化表单,然后通过Ajax名称字符串发送,就像 –

回答

1

您所追求的功能是parse_str。有一个例子如何使用您的JSON使用它:

$str = '[ 
    {"name":"Data[index1][0][index2][0][]","value":"test"}, 
    {"name":"Data[index1][0][index2][0][]","value":"second value"} 
]'; 

$input = json_decode($str); 
// validate $input here 
// then get the data: 
parse_str(
    implode(
     '&', 
     array_map(
      function($var){ 
       return urlencode($var->name) . '=' . urlencode($var->value); 
      }, 
      $input 
     ) 
    ), 
    $request 
); 

print_r($request); 
+0

太棒了!这是我正在寻找的。成千上万的感谢! –

0

假设你在说话spe cifically关于jQuery的serialize方法,那么PHP natviely支持这个; jQuery实现生成一个URL的查询片段。因此,如果将此附加到GET请求请求URL或发送到POST正文中,那么数据将以$ _GET ot $ _POST(resp)的形式出现在PHP中。

如果您将数据以更深奥的方式走私到PHP,那么您可以使用PHP的parse_str()转换为数组。

+0

事实上,这是我需要的转换。这里是示例http://sandbox.onlinephpfunctions.com/code/5d604f087aab07d48be27969e94dc9656fd90ffd –

+0

https://jsfiddle.net/bgay81q2/1/打开控制台 –