PHP表单名称分解

时间:2017-01-18 12:11:50

标签: php

假设jQuery序列化表单发送难以解密的数据:

[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"}]

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

假设您正在专门讨论jQuery的serialize方法,那么PHP自然会支持这一点; jQuery实现生成URL的查询片段。因此,如果将其附加到GET请求请求URL或在POST正文中发送,则数据将在PHP中显示为$ _GET $ _POST(resp)。

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