-4

我正在通过serializeArray()jQuery 从表单创建一个数组:

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

如果我通过 Ajax 将数据捕获到 php,$data = $request->request->get('data');结果会得到以下数组:

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

那么是否有可能以不同的方式实际序列化数组?实现我需要的阵列的最佳方法是什么?

4

2 回答 2

1

正如评论所暗示的那样,没有内置的方法可以这样做。您要么必须循环遍历数组并自己构建对象,要么更常见的是直接使用.serialize()和处理 php 中的参数解释。

于 2018-08-15T09:59:55.537 回答
1
foreach($data as $i) { $newData[$i['name']] = $i['value']; }

$newData 现在就像你想要的那样。

于 2018-08-15T10:26:56.390 回答