将可复制表单的JSON数据解析为PHP for Mail

我有一个表单,其中有可重复的字段,它生成以下JSON数据:

{ "mainmember": [ { "name": "testtest", "surname": "test", "id": "8509295266086", "age": "27", "gender": "Male", "townofbirth": "george", "email": "test@test.com", "contact": "0112121211", "passport": "1111111111111", "postal": "grjiubrwg", "postal_code": "0010", "residential": "tytyytyttyytyt", "residential_code": "4422" } ], "dependant1": [ { "name": "testDUP", "surname": "testDUP", "id": "4802235040081", "age": "64", "gender": "Male", "townofbirth": "tehjte", "cell": "4774811845", "email": "testDUP", "passport": "8202255133088", "relationship": "spouse" } ], "dependant2": [ { "name": "testDUP2", "surname": "testDUP2", "id": "1111111111111", "age": "45", "gender": "F", "townofbirth": "knysnasw", "cell": "0000000000", "email": "testDUP2", "passport": "2222222222222", "relationship": "inlaw" } ] } 

现在可复制的字段是依赖项,在这个JSON中有2个依赖,但在复制时它增加到“dependant3,dependant4,dependant5”。

目前,当我提交并发送给PHP时,我可以计算家属:

  <?php $json = $_POST['parameters']; $json_string = stripslashes($json); $data = json_decode($json_string, true); $datasetCount = count($data); // returns count of array items of any array echo "

There are $datasetCount Dependants

"; $i = 0; foreach ($data as $each_dep) { $i++; echo "

Dependant $i

"; while (list($key, $value) = each ($each_dep)) { echo "$key: $value
"; } } ?>

和我正在使用的jQuery发送函数:

 jQuery('#submit').click(function(){ jQuery('div[class*="mainmember"]').each(function(k, v){ mainmember = {}; mainmember['id'] = ''; $(v).find('.id').each(function(){ mainmember['id'] += $(this).val(); }); mainmember['age'] = ''; $(v).find('.age').each(function(){ mainmember['age'] += $(this).val(); }); mainmember['gender'] = $(v).find('.gender').val(); result['mainmember'] = [mainmember]; }); jQuery('div[class*="dependant"]').each(function(k, v){ dep_counter++ dependants = {}; result['dependant'+dep_counter] = [dependants]; dependants['id'] = ''; $(v).find('.id').each(function(){ dependants['id'] += $(this).val(); }); dependants['age'] = ''; $(v).find('.age').each(function(){ dependants['age'] += $(this).val(); }); dependants['gender'] = $(v).find('.gender').val(); }); var jsonData = JSON.stringify(result); console.log(jsonData); }); 

我只是无法得到其他数据,如姓名,姓氏等。我需要像这样解析一封电子邮件:

主要成员:详情

从属2:细节

依赖3:细节

任何帮助非常感谢。

您的json结构非常痛苦,您似乎正在创建单个对象的数组。 相反,您应该拥有对象数组或键引用的单个对象。

理想情况下,对于您的结构,我认为您应该为依赖项创建一个对象数组,并为主成员创建一个对象,如下所示:

 { "mainmember": { "name": "test2", "id": "1111111111111", "age": "45", "gender": "M", "townofbirth": "knysna", "email": "tjyrrtjhe", "contact": "1111111111", "passport": "5555555555555", "postal": "yrtjyt", "postal_code": "1101", "residential": "tkyutk", "residential_code": "5555" }, "dependants": [ { "name": "dtjtet", "surname": "grwwr", "id": "1111222222222", "age": "48", "gender": "F", "townofbirth": "knmysn", "cell": "0045128588", "email": "fae@gmail.COM", "passport": "1212112111111", "relationship": "spouse" }, { "name": "dtjtet2", "surname": "grwwr2", "id": "11112222222222", "age": "44", "gender": "M", "townofbirth": "knmysn", "cell": "0045128588", "email": "fae@gmail.COM", "passport": "1212112111111", "relationship": "spouse" } ] } 

这样,您就拥有一个“主成员”对象和一系列依赖项。

然后使用如下的PHP代码,您可以打印它的详细信息:

 $value) { echo "$key : $value 
"; } } $json = $_POST['parameters']; $json_string = stripslashes($json); $data = json_decode($json_string, true); $depCount = count($data["dependants"]); echo "

There are $depCount Dependants

"; echo "

Main member data:

"; printMember($data["mainmember"]); foreach ($data["dependants"] as $index => $dependant) { echo "

Dependant $index

"; printMember($dependant); }

要在jquery代码中创建正确的json结构,如下所示:

 jQuery('#submit').click(function(){ jQuery('div[class*="mainmember"]').each(function(k, v){ mainmember = {}; mainmember['id'] = ''; $(v).find('.id').each(function(){ mainmember['id'] += $(this).val(); }); mainmember['age'] = ''; $(v).find('.age').each(function(){ mainmember['age'] += $(this).val(); }); mainmember['gender'] = $(v).find('.gender').val(); //This is changed: Remove the [] from around the mainmember, //should be a single object not an array result['mainmember'] = mainmember; }); //create the array of dependants result['dependants'] = []; jQuery('div[class*="dependant"]').each(function(k, v){ dependant = {}; dependant['id'] = ''; $(v).find('.id').each(function(){ dependant['id'] += $(this).val(); }); dependant['age'] = ''; $(v).find('.age').each(function(){ dependant['age'] += $(this).val(); }); dependant['gender'] = $(v).find('.gender').val(); //add the dependant to the array result['dependants'].push(dependant); }); var jsonData = JSON.stringify(result); console.log(jsonData); }); 

这是未经测试但应该帮助您继续。 您的问题是因为您使用单个对象的数组而不是对象本身。