我希望表单的数据以特定格式作为数组到达服务器。目前,我有以下表单元素,它们可能在我的标记中出现多次:
...
<tr>
<td><p>Friend's Name:</p></td>
<td><p><input type="text" name="friends[name][]" /></p></td>
<td><p>Friend's Email:</p></td>
<td><p><input type="text" name="friends[email][]" /></p></td>
<td><p><input type="button" value="+" class="addOne" /></td>
</tr>
...
提交后,结果如下所示:
[friends] => Array
(
[name] => Array
(
[0] => John Doe
[1] => Jane Doe
)
[email] => Array
(
[0] => <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3c765354527c785359125f5351" rel="noreferrer noopener nofollow">[email protected]</a>
[1] => <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e1ab808f84a1a58e84cf828e8c" rel="noreferrer noopener nofollow">[email protected]</a>
)
)
我可以很好地使用这个数组,但我很好奇是否可以让相同的数据以以下数组示例的形式出现:
[friends] => Array
(
[0] => Array
(
[name] => John Doe
[email] => <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="357f5a5d5b75715a501b565a58" rel="noreferrer noopener nofollow">[email protected]</a>
)
[1] => Array
(
[name] => Jane Doe
[email] => <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="703a111e1530341f155e131f1d" rel="noreferrer noopener nofollow">[email protected]</a>
)
)
我知道我可以使用具有特定索引的名称来实现此目的,如下所示:
friend [0][姓名]
和 friend [0][电子邮件]
但我很好奇是否可以实现相同的结果,而不必动态地为表单元素编写新名称。
最佳答案
我的第一个想法是使用 name="friends[][name]"
而不是 name="friends[name][]"
然后,我很快意识到索引也会增加,以给出 friends[0][name]
和 friends[1][email]
我想,我能想到的唯一可行的解决方案是操纵 POST 数据并按照您想要的方式重新排列它们,例如:
$newFriends=array();
foreach($_POST["friends"] as $k1 => $v1){
foreach($v1 as $k2 => $v2){
$newFriends[$k2][$k1]=$v;
}
}
$newFriends
应该具有您正在寻找的结构
当然,您需要根据需要添加 isset() 和 is_array() 检查...并且要注意,如果数据未按您所输入的顺序进行 POST 处理,则某些值可能会被覆盖。期待...
关于php - 在 PHP 中从 HTML 表单构建 n 维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1792685/