【问题标题】:Create JSON format of PHP dynamic multiple fields创建PHP动态多字段的JSON格式
【发布时间】:2021-01-25 10:21:57
【问题描述】:

我需要创建从 PHP 表单接收到的数据的特定 JSON 格式。如果我可以制作正确的数组,那么我可以将其转换为 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":""
       }
    }

The UI of the PHP form for the understanding of the multiple dynamic fields

【问题讨论】:

    标签: php html jquery css json


    【解决方案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"
        }
    }
    

    【讨论】:

    • 非常感谢 Rasclatt...这正是我所需要的,真是太棒了
    猜你喜欢
    • 2015-02-09
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    相关资源
    最近更新 更多