如何使用基于键值的结构序列化数组?
How can I serializeArray with a structure based on key value?
我正在通过 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"
}
那么是否有可能以不同的方式实际序列化数组?获得我需要的数组的最佳方法是什么?
正如评论所暗示的那样,没有内置的方法可以这样做。您要么必须遍历数组并自己构建对象,要么更常见的是,只需使用 .serialize()
并直接处理 php 中的参数解释。
foreach($data as $i) { $newData[$i['name']] = $i['value']; }
$newData 现在就像您想要的那样。
我正在通过 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"
}
那么是否有可能以不同的方式实际序列化数组?获得我需要的数组的最佳方法是什么?
正如评论所暗示的那样,没有内置的方法可以这样做。您要么必须遍历数组并自己构建对象,要么更常见的是,只需使用 .serialize()
并直接处理 php 中的参数解释。
foreach($data as $i) { $newData[$i['name']] = $i['value']; }
$newData 现在就像您想要的那样。