如何使用具有基于键值的结构的serializeArray?

时间:2018-08-15 09:55:01

标签: php jquery arrays ajax serializearray

我正在通过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吗?实现我需要的阵列的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

正如评论所建议的那样,没有内置的方法。您要么必须遍历数组并自己构建对象,要么更常见的是,只需使用.serialize()并直接在php中处理参数解释。

答案 1 :(得分:1)

foreach($data as $i) { $newData[$i['name']] = $i['value']; }

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