【问题标题】:How to loop through dynamic form inputs and insert into an array如何遍历动态表单输入并插入数组
【发布时间】:2010-08-11 14:45:44
【问题描述】:

我有一个表单,要求用户在多个表单域中输入数字。他们可以选择他们想要多少个表单域。我已将表单域标记为 df1、df2、df3 等。对于每个额外的表单域,用户添加它只会在 df 之后的数字上加 1。我的问题是它试图捕获(使用 PHP)这些字段并将它们放在一个数组中。为了使事情复杂化,用户可能不会填写一个字段,例如df2 或 df15。我正在寻找一种方法来对以 df1 开头的表单字段进行排序,但消除任何留空的字段。然后,将它们的值(数字)插入到数组中。不幸的是,我对如何筛选出已发布的 NULL 表单字段感到困惑。我一直在尝试遍历字段并在 df 之后增加数字但没有成功。

非常感谢任何帮助。

非常感谢,

亚当

【问题讨论】:

    标签: php


    【解决方案1】:

    请注意,您还可以为表单字段指定索引名称:

    <input type="text" name="df[1]" />
    <input type="text" name="df[2]" />
    

    然后它们将在array 中提供,例如(取决于您的提交方法):

    foreach ($_GET['df'] as $num => $val) {
        …
    }
    

    如果表单名称中没有索引,PHP 会自动索引它们,就像assigning to an array 时一样。

    <input name="df[]" />
    <input name="df[]" />
    

    您可以通过这种方式创建多维数组:

    <label>Foo</label><input name="df[foo][]" /> <!-- $_REQUEST['df']['foo'][0] -->
    <label>Bar</label><input name="df[bar][]" /> <!-- $_REQUEST['df']['bar'][0] -->
    
    <label>Foo</label><input name="df[foo][]" /> <!-- $_REQUEST['df']['foo'][1] -->
    <label>Bar</label><input name="df[bar][]" /> <!-- $_REQUEST['df']['bar'][1] -->
    

    请注意,每个[] 都会导致生成的索引递增。这意味着它对于多维数组并不是非常有用,除了最后一个索引。例如,假设您希望每个 $_REQUEST['df'] 持有一个 array('foo'=&gt;..., 'bar'=&gt;...)。以下方法不起作用:

    <label>Foo</label><input name="df[][foo]" /> <!-- $_REQUEST['df'][0]['foo'] -->
    <label>Bar</label><input name="df[][bar]" /> <!-- $_REQUEST['df'][1]['bar'] -->
    

    相反,您需要:

    <label>Foo</label><input name="df[0][foo]" />
    <label>Bar</label><input name="df[0][bar]" />
    

    【讨论】:

    • 感谢您的帮助。我将如何从数组中删除那些为 NULL 的值?非常感谢,亚当
    • 数组中不会有空值,因为该值要么是(可能为空)字符串,要么根本不存在于数组中。您可能想要检查 foreach 循环中的字符串是否为空,例如通过测试“if (empty($val)) ...”或“if (trim($val)) ...”。后者会忽略只包含空格的文本字段。
    • 再次感谢您的帮助。使用术语 NULL 对我来说是不正确的,我实际上是指空的,就像你指出的那样。我的问题是如何消除具有空值的数组位置。例如,将 df[1,7,3,,4] 转换为 df[1,7,3,4]。这就是我真正苦苦挣扎的地方,因为我需要一个“干净”的数组来进行以后的计算。非常感谢,亚当
    • 在这种情况下,添加类似“if (empty($val)) { unset($_GET['df'][$num]); }”在你的循环中。或者,构造一个新的空数组并用您选择的值填充它。
    猜你喜欢
    • 2014-11-14
    • 2015-11-02
    • 2013-08-15
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多