Я создаю массив из формы через 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"}
Так можно ли по-другому сериализовать массив? Каков наилучший способ получить массив мне нужно?
foreach($data as $i) { $newData[$i['name']] = $i['value']; }
$ newData теперь такой, как вы хотели.
Как отмечается в комментариях, нет встроенного способа сделать это. Вы должны либо пройти через массив и построить объект самостоятельно, либо, что более распространенно, просто использовать .serialize()
и обрабатывать интерпретацию параметров в php напрямую.