php - 在 PHP 中从 HTML 表单构建 n 维数组

标签 php forms multidimensional-array

我希望表单的数据以特定格式作为数组到达服务器。目前,我有以下表单元素,它们可能在我的标记中出现多次:

...
<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/

相关文章:

python - 在 Numpy 中计算累积返回,数组索引问题

ios - 处理此类问题的更好方法是什么?

php - 从 PHP 中的多个下拉菜单中获取值

javascript - 路由在 Angular 和 Nodejs 应用程序中不起作用

javascript - 从 g-recaptcha 标签获取 reCAPTCHA v2 的 widgetId?

css - 在 html 表单中使用等宽字体是个好主意吗?

javascript - 如何为每一行创建多维数组?

php - 通过文本输入表单 php 将数据发送到 android 设备

php - 日期始终显示 1970 年 1 月 1 日

PHP Abraham 的 TwitterOAuth,错误 32 无法对您进行身份验证