如何使用基于键值的结构序列化数组?

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 现在就像您想要的那样。