【问题标题】:How can I serializeArray with a structure based on key value? [closed]如何使用基于键值的结构序列化数组? [关闭]
【发布时间】:2019-01-22 04:56:52
【问题描述】:

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

【问题讨论】:

  • 您需要通过手动循环表单元素来创建该对象结构。没有内置的 jQuery 方法可以为你做这件事
  • 对,你必须在你的js中手动构建你想要的数组
  • 或者您可以手动解析数据,而不是使用$request->request->get()。我猜这会发送 JSON 吗?或者正如@LawrenceCherone 建议的那样,使用array_column:array_combine(array_column($data, 'name'), array_column($data, 'value'));
  • @AymDev 这解决了我的问题!
  • @AymDev 你想发表你的建议作为答案吗?

标签: php jquery arrays ajax serializearray


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    foreach($data as $i) { $newData[$i['name']] = $i['value']; }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      相关资源
      最近更新 更多