#php #html #jquery #css #json
#php #HTML #jquery #css #json
Вопрос:
Мне нужно создать определенный формат JSON для данных, которые я получил из формы PHP. Если я смогу создать правильный массив, я мог бы преобразовать его в JSON, но не смог найти, как это сделать… Моя форма имеет несколько полей, которые принимают данные и преобразуют их в массив, подобный этому
Array
(
[user_id] =>
[title2] => Billing
[sub_title2] => to
[emails2] => abc@gmail.com
[sub_title3] => cc
[emails3] => xyz@gmail.com
[sub_title4] => for
[emails4] => john@gmail.com
[title5] => Free
[sub_title5] => cc
[emails5] => abc@gmail.com
[sub_title6] => adf
[emails6] => ben@gmail.com,ten@gmail.com
)
Это код, который принимает данные
$(document).on("click", "#add_section", function (e) {
i ;
k ;
var Html1 ='<div id="email_section' k '" style="margin-top: 20px" class="form-group row">';
Html1 = '<div class="col-lg-12">';
Html1 = '<div class="col-lg-9">';
Html1 = '<label class="control-label col-lg-3">Add Section' i '<span style="color:red;"> *</span></label>';
Html1 = '<div class="col-lg-9">';
Html1 = '<input class=" form-control" id="title' i '[]" name="title' i '" type="text" placeholder="Sales" />';
Html1 = '</div>';
Html1 = '</div>';
Html1 = '</div>';
Html1 = '<div class="col-lg-12">';
Html1 = '<div class="col-lg-9">';
Html1 = '<label class="control-label col-lg-3"></label>';
Html1 = '<div class="col-lg-2">';
Html1 = '<input class=" form-control" id="sub_title' i '[]" name="sub_title' i '" type="text" placeholder="to" />';
Html1 = '</div>';
Html1 = '<div class="col-lg-7">';
Html1 = '<input class=" form-control" id="emails' i '[]" name="emails' i '" placeholder="abc@gmail.com" />';
Html1 = '</div>';
Html1 = '</div>';
Html1 = '<div class="col-lg-2">';
Html1 = '<span class="btn btn-primary add_email_row" id="' k '">Add</span>';
Html1 = '</div>';
Html1 = '</div>';
$('.modal-body').append(Html1);
});
$(document).on("click", ".add_email_row", function (e) {
i ;
k ;
var section = $(this).attr("id");
var Html = '<div id="row' i '" class="row">';
Html = '<div class="col-sm-12">';
Html = '<div class="col-sm-2" style="margin-left: 20px;"></div>';
Html = '<div class="col-sm-9">';
Html = '<div class="col-sm-2"><input class=" form-control" id="sub_title' i '[]" name="sub_title' i '" type="text" placeholder="to" /></div>';
Html = '<div class="col-sm-7"><input class=" form-control" id="emails' i '[]" name="emails' i '" type="text" placeholder="emails" /></div>';
Html = '<div class="col-sm-3"><a type="button" name="remove" id="' i '" class="btn btn-danger btn_remove">X</a></div>';
Html = '</div></div></div>';
$('#email_section' section '').append(Html);
});
Формат JSON, который я хочу, это
{
"billing":{
"to":"abc@email.com",
"cc":"xyz@email.com",
"adf":"mail@email.com",
"from":""
},
"free":{
"to":"abc@gmail.com,",
"cc":"xyz@email.com",
"adf":""
}
}
Пользовательский интерфейс PHP form для понимания нескольких динамических полей
Ответ №1:
Если форма может быть изменена, измените входные данные на массивы. Также инкапсулируйте ваши два блока и сохраните их в той же логике приращения:
<script>
function addSection(i, k)
{
var Html1 =
'<div id="email_section' k '" style="margin-top: 20px" class="form-group row">'
'<div class="col-lg-12">'
'<div class="col-lg-9">'
'<label class="control-label col-lg-3">Add Section' i '<span style="color:red;"> *</span></label>'
'<div class="col-lg-9">'
'<input class=" form-control" id="title' i '" name="title[' i ']" type="text" placeholder="Sales" />'
'</div>'
'</div>'
'</div>'
'<div class="col-lg-12">'
'<div class="col-lg-9">'
'<label class="control-label col-lg-3"></label>'
'<div class="col-lg-2">'
'<input class=" form-control" id="sub_title' i '" name="sub_title[' i '][]" type="text" placeholder="to" />'
'</div>'
'<div class="col-lg-7">'
'<input class=" form-control" id="emails' i '" name="emails[' i '][]" placeholder="abc@gmail.com" />'
'</div>'
'</div>'
'<div class="col-lg-2">'
'<span class="btn btn-primary add_email_row" id="' k '">Add</span>'
'</div>'
'</div>';
$('.modal-body').append(Html1);
}
function addEmail(obj, i, k)
{
var section = obj.attr("id");
var Html =
'<div id="row' i '" class="row">'
'<div class="col-sm-12">'
'<div class="col-sm-2" style="margin-left: 20px;"></div>'
'<div class="col-sm-9">'
'<div class="col-sm-2"><input class=" form-control" id="sub_title' i '" name="sub_title[' i '][]" type="text" placeholder="to" /></div>'
'<div class="col-sm-7"><input class=" form-control" id="emails' i '" name="emails[' i '][]" type="text" placeholder="emails" /></div>'
'<div class="col-sm-3"><a type="button" name="remove" id="' i '" class="btn btn-danger btn_remove">X</a></div>'
'</div>'
'</div>'
'</div>';
$('#email_section' section).append(Html);
}
var i = 0;
var k = 0;
$(document).on("click", "#add_section,.add_email_row", function (e) {
if($(this).hasClass('add_email_row')) {
addEmail($(this), i, k);
}
else {
i ;
k ;
addSection(i, k);
}
});
</script>
У вас должно остаться:
Array
(
[title] => Array
(
[1] => Section 1
[2] => Section 2
)
[sub_title] => Array
(
[1] => Array
(
[0] => subtitle1
[1] => subtitle2
[2] => subtitle3
)
[2] => Array
(
[0] => subtitle1
)
)
[emails] => Array
(
[1] => Array
(
[0] => email1@example.com
[1] => email2@example.com
[2] => email3@example.com
)
[2] => Array
(
[0] => email1@example.com
)
)
)
Отсюда гораздо проще получить ваш массив в php:
$array = $_POST;
$new = [];
foreach($array['title'] as $k => $title) {
$new[$title] = array_combine($array['sub_title'][$k], $array['emails'][$k]);
}
echo json_encode($new, JSON_PRETTY_PRINT);
Что даст вам:
{
"Section 1": {
"subtitle1": "email1@example.com",
"subtitle2": "email2@example.com",
"subtitle3": "email3@example.com"
},
"Section 2": {
"subtitle1": "email1@example.com"
}
}
Комментарии:
1. Большое спасибо, Расклатт … удивительно, это именно то, что мне нужно