Как я могу serializeArray со структурой, основанной на значении ключа?

Я создаю массив из формы через serializeArray() в jQuery:

var form = $(this).closest('form');
var formData = form.serializeArray();

Если я выведу это с alert(formData.toSource()); Я получаю результат:

[{name:"form[username]", value:"1"}, {name:"form[email]", value:"[email protected]"}, {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) "[email protected]"}
[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) "[email protected]"["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

Решение

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

$ newData теперь такой, как вы хотели.

1

Другие решения

Как отмечается в комментариях, нет встроенного способа сделать это. Вы должны либо пройти через массив и построить объект самостоятельно, либо, что более распространенно, просто использовать .serialize() и обрабатывать интерпретацию параметров в php напрямую.

1

По вопросам рекламы [email protected]