【问题标题】:Looping through form values in PHP [closed]在PHP中循环表单值[关闭]
【发布时间】:2016-04-06 15:27:14
【问题描述】:

我有一个包含 8 个字段的表单。我用这样的 for 循环创建了这个表单:

    echo '<form name="num" method="post">';//create a form that uses the POST method for submission
    for($i=0; $i<8; $i++){//loop 8 times, and display 8 input fields
         echo '<input id='.$i.' type="number" name="num[]" >';
    }
    echo '<input type="submit" class="submit" name="num-submit" value="Go">
          </form>';

我想遍历所有这些字段,获取用户提交的数字,并对这些值进行一些算术运算。

我在堆栈溢出中查看了与我类似的其他问题;我已经尝试过 Marc B 的回复:

"

给定:

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

等等...在你的表单中,你会用

循环它们
foreach($_POST['foo'] as $index => $value) {
... }

"

我已将该响应应用于我自己的代码:

    if (!empty($_POST['num-submit'])) {//If the form is submitted, execute the following code

        foreach($_POST['num'] as $name => $value) {// Loop over each item in the form.
             //code to add elements (the numbers submitted) together
        }
    }

这完全适合我,但我只是不明白为什么这是解决方案。我想完整解释为什么这是解决方案以及为什么输入字段的名称必须是 foo[]num[] 并带有方括号(这不只是创建一个数组吗?)。此外,如果您还可以帮助在该循环中将数字相加,那就太好了。 提前非常感谢!

【问题讨论】:

    标签: php arrays forms loops post


    【解决方案1】:

    这是解决方案之一,但您可以轻松编写

    <input type="text" name="foo[0]" /> 
    <input type="text" name="foo[1]" /> 
    

    或通过键名

    <input type="text" name="foo[keyname]" />
    <input type="text" name="foo[keyothername]" />   
    

    为什么有效? 我想你会在下面的链接中找到你的答案

    重要的部分是:

    在 HTML 中指定数组键是可选的。如果您不指定键,则数组将按照元素在表单中出现的顺序填充。我们的第一个示例将包含键 0、1、2 和 3。

    PHP 还可以理解表单变量上下文中的数组。例如,您可以将相关变量组合在一起,或使用此功能从多选输入中检索值。例如,让我们向自身发布一个表单,并在提交时显示数据。

    所以用更简单的话来说,当您命名表单变量并且它看起来像数组名称时,PHP 会理解它并在您的脚本中转换为数组。

    要对值求和,请使用array_sum() 内置函数:

    if (!empty($_POST['foo'] && is_array($_POST['foo'])) {
        echo array_sum($_POST['foo']);
    }
    

    【讨论】:

      【解决方案2】:

      是的,它创建了数组。 您正在循环查找数组的总和。有一个函数用于计算数组的总和 你可以使用

      $sum = array_sum($num);
      

      如果这不起作用,那么您可以使用下面的。上面可能不起作用,因为我们得到的数组是二维的。所以我们需要计算数组值的总和。

      $sum = array_sum(array_values($num));
      

      【讨论】:

      • 这段代码会出现语法错误,请使用 $ 作为变量名
      • 谢谢..对不起我错过了
      猜你喜欢
      • 2012-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 2014-03-18
      • 1970-01-01
      相关资源
      最近更新 更多