如何在json对象中将整组文本输入作为数组发送?

时间:2016-01-12 16:37:09

标签: php arrays json

我的表单中有一个部分,用户可以点击添加更多"。

例如,我们假设您可以在注册时添加朋友:

<a href="#">Click to add friend</a>

<label>First Name</label>
<input type="text" name="friend[firstName]">

<label>Last Name</label>
<input type="text" name="friend[lastName]">
...

你可以拥有任意数量的朋友。

当我提交表单时,我会在表格中捕获主记录。我们称之为tableA。设置完成后,我返回插入ID,然后将所有朋友插入tableB,外键指向主记录。

到目前为止一切顺利。

我要做的是将每个朋友捕获为一个数组并保存为json对象。我关闭,但不完全在那里。

以上输出:

...
[friend_data] => {"friend":{"firstName":"Tyler","lastName":"Durden"}}

我们说我加了三个朋友。只记录最后一位朋友(这是有意义的)。

所以我尝试改变我的输入:

HTML

<label>First Name</label>
<input type="text" name="friend[][firstName]">

<label>Last Name</label>
<input type="text" name="friend[][lastName]">
...

这让我知道了:

[friend_data] => {"friend":[{"firstName":"Tyler"},{"lastName":"Durden"},{"firstName:"Joe"},{"lastName":"Smith"}]}

我(想)试图完成的是:

[friend_data] => {"friend":[{"firstName":"Tyler"},{"lastName":"Durden"}],[{"firstName:"Joe"},{"lastName":"Smith"}]}

我用它来创建上面的内容:

PHP

 json_encode(array('friend' => $input['friend']))

这样我就可以遍历json对象并像这样呈现每个数组:

HTML

<ul>
    <li>First Name: Tyler</li>
    <li>Last Name: Durden</li>
</ul>
<ul>
    <li>First Name: Joe</li>
    <li>Last Name: Smith</li>
</ul>

感谢您的任何建议!

修改

感谢您的建议Marco Alka!

我已经像这样更新了我的标记:

HTML

...
<input type="text" name="friend[1][firstName]">
<input type="text" name="friend[1][lastName]">

我的输入是通过javascript动态创建的。我添加新朋友时,标记看起来像这样:

...
<input type="text" name="friend[2][firstName]">
<input type="text" name="friend[2][lastName]">

......等等。

这就产生了这个:

...
[friend_data] => {"friend":{"1":{"firstName":"Tyler","lastName":"Durden"},"2":{"firstName":"Joe","lastName":"Smith","address":"3014 SW Prairieview Rd","city":"Ankeny","zip":"","acresAllotted":""}}}

我仍然不认为这是对的。 它与我如何编码数据有关吗?

$person->friend_data = json_encode(array('friend' => $input['friend']));

感谢Marco Alka的帮助!以下是我在其他人遇到这个帖子时所做的事情。

如前所述,我的表单中有一部分可以添加朋友到我的注册。默认情况下,页面加载时只能看到一个朋友。使用javascript(jQuery)我允许用户添加任意​​数量的朋友。

这是最初加载时页面上的标记(为简单起见缩短了)。

HTML

<p><a href="#" id="add">Add Friend</a>
<form>
<div class="clone">
<label>First Name</label>
<input type="text" name="friends[1][firstName]">

<label>Last Name</label>
<input type="text" name="friends[1][lastName]">
</div>

<button type="submit">Submit</submit>
</form>

jquery的

var friendCount = 1;

$('#add').click(function (event) {
   // do stuff.
   // update the index
   jquery.find(':input').each(function () {
       $(this).attr('name', 'friend[' + friendCount + '][' + $(this).data('name') + ']');
            });
});

然后在php方面我抓住了所有的值:

PHP

$friends = array();
foreach ($input['friend'] as $friend) {
    array_push($friends, $friend);
}
...
$person->friend_data = json_encode($friends);

将产生这个json:

JSON

[friend_data] => [{"firstName":"Tyler","lastName":"Durden"},{"firstName":"Master","lastName":"Shake"}]

1 个答案:

答案 0 :(得分:1)

填写ID时可以制作有用的数组:

Friend 1:
<label>First Name</label>
<input type="text" name="friend[0][firstName]">
<label>Last Name</label>
<input type="text" name="friend[0][lastName]">

Friend 2:
<label>First Name</label>
<input type="text" name="friend[1][firstName]">
<label>Last Name</label>
<input type="text" name="friend[1][lastName]">