php for循环数组

时间:2015-06-23 01:12:47

标签: php html arrays for-loop

我有一个html表单,将数组传递给php,然后执行for循环以打印出值。这是我的代码

$payloads = $_POST['topay'];
$loadNum = $_POST['loadnum'];
$unit = $_POST['unit'];
$driver = $_POST['driver'];

for($i=0;$i<count($payloads);$i++)
    {
        echo $payloads[$i];
        echo "<br>";
        echo '<td width="50" valign="top">'.$loadNum[$i].'</td>';
        echo '<td width="50" valign="top">'.$unit[$i].'</td>';
        echo '<td width="150" valign="top">'.$driver[$i].'</td>';
    }

$ _POST ['topay']是我传入的复选框数组,其中只有经过检查的项目才能通过。例如,在我传递给php的表单中有多个复选框,它应该只传递已检查的复选框。当我在for循环中执行第一个echo时,它会正确地打印出值,但是内部的回声不会。

值:

$loadNum = [5,6]
$unit = [101,103]
driver = ["joe", "mike"]

选中这两个复选框时,输出正常。选中第一个复选框后,输出正常。但是,如果我只检查第二个(6,103,“迈克”),输出仍然是(5,101,“乔”)

修改 这是我发送到这个php页面的HTML代码:

echo '<form action="statement.php" target="_blank" METHOD="post">';
echo '<td><input type="checkbox" name="topay[]" value="'.$loadNumber.'" checked></td>';
echo '<td width="70"><input type="hidden" name="loadnum[]" value="'.$loadNumber.'" />'. $loadNumber.'</td>';
echo '<td width="70"><input type="hidden" name="unit[]" value="'.$unit.'" />' .$unit.'</td>';
echo '<td width="150"><input type="hidden" name="driver[]" value="'.$driver.'" />' .$driver.'</td>';
?>
<p><input type="submit" name="sumbit" value="Create Statement" /></p>

1 个答案:

答案 0 :(得分:1)

假设您已正确命名输入值,例如:

<input name="topay[0]" type="checkbox">
<input name="loadnum[0]" value="5">
<input name="unit[0]" value="101">
<input name="driver[0]" value="joe">

<input name="topay[1]" type="checkbox">
<input name="loadnum[1]" value="6">
<input name="unit[1]" value="103">
<input name="driver[1]" value="mike">

请注意我使用的topay[0]topay[1]符号,而不是使用topay[]的表单输入值:

<input type="checkbox" name="topay[]" value=" ...
<input type="hidden" name="loadnum[]" ...
<input type="hidden" name="unit[]" ...

复选框字段值仅在表单提交时发送,如果已经过检查,则会发送:

  • 如果仅选中第一个复选框 - &gt; [5]
  • 如果同时选中了两个复选框 - &gt; [5, 6]
  • 如果仅选中第二个复选框 - &gt; [6]

使用我之前建议的命名方案,会发送:

  • 如果仅选中第一个复选框 - &gt; [5]
  • 如果同时选中了两个复选框 - &gt; [5, 6]
  • 如果仅选中第二个复选框 - &gt; [1 => 6]

更正这些字段名称后,您应该使用$payloads迭代foreach数组,以便您也可以获取关联键;这很重要,因为只有选中的值与表单一起发送。

foreach ($payloads as $key => $payload) {
    echo $payload, '<br>';
    printf('<td width="50" valign="top">%s</td>', $loadNum[$key]);
    printf('<td width="50" valign="top">%s</td>', $unit[$key]);
    printf('<td width="50" valign="top">%s</td>', $driver[$key]);
}