【问题标题】:PHP Form Data with Multi-dimensional Array具有多维数组的 PHP 表单数据
【发布时间】:2018-08-26 08:11:12
【问题描述】:

假设我有一个包含带有

的输入字段的表单

name="my_options[my_elements][1][name]"

还有一个

name="my_options[my_elements][1][category]"

当我提交表单时,一切正常,包含名称和类别键/值的新数组被添加到 DB 中 my_options 数组中的 my_elements 数组中。

我也可以使用name="my_options[my_elements][][name]"

my_options[my_elements]中创建一个新数组

但是我显然不能再使用name="my_options[my_elements][][category]"

因为这会将类别值放入另一个新数组中。

有没有办法动态跟踪使用第一个 [] 创建的新数组的位置,以便可以在多维数组的特定级别添加值?

为了澄清,我希望动态地将元素添加到以下数组:

'my_options' =>
 array (size ?)
  0 => 
   'my_elements' => 
     array (size=2)
      0 => 
         array (size=2)
            'name' =>  'name 1'
            'category' =>  'cat 1'
      1 => 
         array (size=2)
            'name' =>  'name 2'
            'category' =>  'cat 2'

`

【问题讨论】:

  • 我怀疑有没有一种方法可以做到这一点,而无需像您已经做过/尝试过的那样手动指定索引。有那么大的问题吗?您可能已经在 HTML 端的某处有一个索引值,无论它是 foreach 循环的键还是为动态表单增加的数字。
  • 问题是表单可以通过JQuery在前端删除行,这导致后端不存在索引问题。我可能需要以某种方式重新索引行并将行号插入到数组表达式中,然后再发布。
  • 如何导致索引不存在?如果您删除一行,那么实际上不再将其索引发送到后端,让它知道它已被删除似乎是合乎逻辑的。如果您发送第 1、3 和 4 行,您知道它与之前的第 1、3 和 4 行相同,但第 2 行现在不存在,因此被删除。
  • 这可能只是因为我使用从 0 到键的数组长度 -1 的 for 循环显示现有行。可以使用 foreach 循环来解决这个问题。

标签: php arrays forms multidimensional-array


【解决方案1】:

我不会在应用程序的 html 部分中使用数组定义。

坚持输入名称,例如name="category",然后在您的 php 文件中获取提交的数据并按照您想要的方式将其组织到一个数组中。

假设您使用 POST 作为表单方法: $category = $_POST['category'];

(别忘了验证输入)

【讨论】:

  • 上下文是 WordPress setttngs API,我所展示的方式是我相信的标准方法,尽管选项通常具有较少的维度。不过,我认为这是一个通用的 PHP 问题。
猜你喜欢
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 2015-10-20
  • 2014-02-01
  • 2022-09-28
相关资源
最近更新 更多