【问题标题】:Make array from $_POST values [closed]从 $_POST 值创建数组 [关闭]
【发布时间】:2012-10-24 14:41:37
【问题描述】:

让我们开始告诉我,我正在通过表单中的帖子传递 x 数量的变量。
让我们将它们命名为 menu_category_1menu_category_2、...、menu_category_x,也许还有 menu_category_new(我使用 if empty 来检查最后一个变量)。

为了方便起见,我还发送了参数$key(变量数量从 0 开始)。
现在我需要将它们设置为一个新变量$menu_category(数组),它将被内爆,然后更新我的数据库。

如何将新的$menu_category 变量设置为包含我在开头命名的所有变量的数组?
我正在考虑使用 for 循环,但我想不出有用的东西。 谢谢!!!


我最终采用了 Quentin 的方式,只是将 [] 添加到键中。我之所以选择这个只是因为它立即起作用。但是,我将深入研究 janenz00 的建议,我个人认为这是要走的路。 感谢所有花时间经历这一切的人!!!!

【问题讨论】:

  • 您确实需要以简洁的方式格式化您的问题
  • 为什么不首先将它们作为数组发送(使用name="menu_category[]" 语法)?
  • 您创建的 for 循环是不是不起作用,或者不是您认为的那样?尝试分享你所做的事情,我们将从那里开始......
  • 不,没有必要使用for:我怀疑这里简单的array_values 就足够了。尽管如此,我还是不禁想知道为什么要在这里采取艰难的方式。 )

标签: php arrays forms


【解决方案1】:

最好的方法是,当您发布信息时,将其结构化。

<input type="text" name="cat_names[]" />
<input type="text" name="cat_names[]" />
<input type="text" name="cat_names[]" />

现在,当您发布数据时,变量 $_POST['cat_names'] 将包含 3 个元素。如果你有 4 个输入框,它将是一个 4 元素数组。

例子:

<input type="text" name="cat_names[]" value="a" />
<input type="text" name="cat_names[]" value="b" />
<input type="text" name="cat_names[]" value="echo" />
<input type="text" name="cat_names[]" value="kitten" />

发布数据

$_POST['cat_names'] = array('a', 'b', 'echo', 'kitten');

虽然没有说会保持顺序,但'b'可能在'a'之前。

但这取决于您是使用输入还是通过 JavaScript 进行。如果您使用 JS,您也可以发送其他信息,或者使用 JSON。

【讨论】:

    【解决方案2】:

    正如上面每个人所建议的那样,最好的方法是将表单本身的所有内容作为数组传递。如果您因任何原因无法修改当前代码,这就是您在当前场景中处理它的方式。

        $menu_category = array();
        for ($i = 1; $i <= $_POST['key']; $i++) {
            if (!empty($_POST['menu_category_'.$i]))
               $menu_category[] = $_POST['menu_category_'.$i];
    
        }
    

    【讨论】:

      【解决方案3】:

      在表单中使用[] 语法是首选。

      但是,如果您出于某种原因不想这样做,您可以这样做:

      for ($x = 0; $x <= $_POST['key']; $x++) {
         $menu_category[] = $_POST["menu_category_$x"];
      }
      $menu_category[] = $_POST['menu_category_new'];
      

      【讨论】:

        【解决方案4】:

        您将表单元素(所有相同类型的元素)命名为menu_category[](而不是menu_category_N)。

        当你提交表单时,PHP 会自动将它们排列成一个数组!

        【讨论】:

          【解决方案5】:

          让我们将它们命名为menu_category_1menu_category_2

          您使用的是 PHP,所以让我们将它们命名为 menu_category[0]menu_category[1] 等(或 menu_category[]menu_category[] 等)。

          那么$_POST['menu_category']$_GET['menu_category'] 将是一个数组。

          即将内爆然后更新我的数据库

          标准化您的数据库。使用外键和第二个表来表达您的一对多关系,而不是通过存储 CSV 数据。

          【讨论】:

          • 你能解释一下你的答案背后的原因吗?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-18
          • 1970-01-01
          • 1970-01-01
          • 2018-08-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多