我正在通过jQuery中的serializeArray()
从表单创建数组:
var form = $(this).closest('form');
var formData = form.serializeArray();
如果我用alert(formData.toSource());
输出,则得到结果:
[{name:"form[username]", value:"1"}, {name:"form[email]", value:"1@12.sw"}, {name:"form[is_active]", value:"1"}, {name:"form[plainPassword][first]", value:""}, {name:"form[plainPassword][second]", value:""}, {name:"form[id]", value:"9"}, {name:"form[_token]", value:"Mk"}]
如果我使用$data = $request->request->get('data');
通过Ajax将数据捕获到php,则会得到以下数组:
array(7) {
[0]=>
array(2) {
["name"]=>
string(14) "form[username]"
["value"]=>
string(1) "1"
}
[1]=>
array(2) {
["name"]=>
string(11) "form[email]"
["value"]=>
string(7) "1@12.sw"
}
[2]=>
array(2) {
["name"]=>
string(15) "form[is_active]"
["value"]=>
string(1) "1"
}
[3]=>
array(2) {
["name"]=>
string(26) "form[plainPassword][first]"
["value"]=>
string(0) ""
}
[4]=>
array(2) {
["name"]=>
string(27) "form[plainPassword][second]"
["value"]=>
string(0) ""
}
[5]=>
array(2) {
["name"]=>
string(8) "form[id]"
["value"]=>
string(1) "9"
}
[6]=>
array(2) {
["name"]=>
string(12) "form[_token]"
["value"]=>
string(43) "Mk"
}
}
我实际上需要的数组是这样的:
array(2) {
["form[username]"]=>
string(14) "1"
["form[email]"]=>
string(1) "1@12.sw"
["form[is_active]"]=>
string(1) "1"
["form[plainPassword][first]"]=>
string(0) ""
["form[plainPassword][second]"]=>
string(0) ""
["form[id]"]=>
string(1) "9"
["form[id]"]=>
string(2) "Mk"
}
那么实际上有可能以不同的方式序列化Array吗?实现我需要的阵列的最佳方法是什么?
答案 0 :(得分:1)
正如评论所建议的那样,没有内置的方法。您要么必须遍历数组并自己构建对象,要么更常见的是,只需使用.serialize()
并直接在php中处理参数解释。
答案 1 :(得分:1)
foreach($data as $i) { $newData[$i['name']] = $i['value']; }
$ newData现在就像您想要的那样。