PHP处理许多表数据的数组

时间:2017-09-23 08:09:09

标签: php

有没有办法在PHP处理每个表?例如,我有这个PHP代码:

<table>
<tr>
<td><input type="hidden" value="table1" name="tables[]" />Table 1</td>
</tr>
<tr>
<td><input type="hidden" value="1000" name="var1[]" />1000</td>
<td><input type="hidden" value="2000" name="var2[]" />2000</td>
</tr>
</table>
<table>
<tr>
<td colspan="2"><input type="hidden" value="table1" name="tables[]" />Table 2</td>
</tr>
<tr>
<td><input type="hidden" value="1000" name="var1[]" />1000</td>
<td><input type="hidden" value="2000" name="var2[]" />2000</td>
</tr>
<tr>
<td><input type="hidden" value="3000" name="var1[]" />3000</td>
<td><input type="hidden" value="4000" name="var2[]" />4000</td>
</tr>
</table>

我的输入名称对于每个表(tables, var1, and var2)具有相同的名称。如果我使用这些方法的问题:

foreach ($_POST['var1'] as $cnt => $cat) {
   $table = $_POST['tables'][$cnt];
   $var2 = $_POST['var2'][$cnt];
   myFunction($table, $var2);
}

它会给出一个错误,例如&#34;注意:未定义的偏移量:2 bla bla bla&#34; 有没有想过如何为每个表创建运行的代码?仅供参考:我的表格多种多样,可能是1,2或100.而且每张表格可能有1,2,3或100行,每张表格可能有不同的行数。

3 个答案:

答案 0 :(得分:0)

你有这个通知,因为你想获得$_POST['tables']数组的第三个元素,并且这个偏移量不存在。看看你的html代码,你有第一组和第二组的表数组。但是在第三组你没有表数组。

foreach ($_POST['var1'] as $cnt => $cat) {
    $var2 = $_POST['var2'][$cnt];    
    if (isset($_POST['tables'][$cnt])) {
        $table = $_POST['tables'][$cnt];
        myFunction($table, $var2); 
    }
}

答案 1 :(得分:0)

目前查看您的代码,我只能看到$table未被声明的问题。

编辑:通过查看Daredzik的答案,您编辑了问题并从第三个表中删除了<td>,这就是您收到偏移错误的原因。查看您的表格并确保其中包含所有正确的数据。

这是一个工作解决方案,输出显示它有效:

<?php
if (isset($_POST)) {

    foreach ($_POST['tables'] as $index => $table) {

        $var2 = $_POST['var2'][$index];
        $var1 = $_POST['var1'][$index];

        echo 'table = ' . $table;
        echo '<br>';
        echo 'var1 = ' . $var1;
        echo '<br>';
        echo 'var2 = ' . $var2;
        echo '<br><br>';
    }
}
?>
<form method="post">
    <table>
        <tr>
            <td><input type="hidden" value="table1" name="tables[]" />Table 1</td>
            <td><input type="hidden" value="1000" name="var1[]" />1000</td>
            <td><input type="hidden" value="2000" name="var2[]" />2000</td>
        </tr>
    </table>
    <table>
        <tr>
            <td><input type="hidden" value="table2" name="tables[]" />Table 2</td>
            <td><input type="hidden" value="1000" name="var1[]" />1000</td>
            <td><input type="hidden" value="2000" name="var2[]" />2000</td>
        </tr>
        <tr>
            <td><input type="hidden" value="table3" name="tables[]" />Table 3</td>
            <td><input type="hidden" value="3000" name="var1[]" />3000</td>
            <td><input type="hidden" value="4000" name="var2[]" />4000</td>
        </tr>
    </table>
    <button>Click</button>
</form>

答案 2 :(得分:0)

正如您所说,可以有许多行和列。我会从你的POST数据创建一个二维数组:

<table>
  <tr>
    <td><input type="hidden" value="table1" name="tables[0][0]" />Table 1</td>
    <td><input type="hidden" value="1000" name="tables[0][1]" />1000</td>
    <td><input type="hidden" value="2000" name="tables[0][2]" />2000</td>
  </tr>
</table>
<table>
  <tr>
    <td><input type="hidden" value="table1" name="tables[1][0]" />Table 2</td>
    <td><input type="hidden" value="1000" name="tables[1][1]" />1000</td>
    <td><input type="hidden" value="2000" name="tables[1][2]" />2000</td>
  </tr>
  <tr>
    <td><input type="hidden" value="3000" name="tables[2][1]" />3000</td>
    <td><input type="hidden" value="4000" name="tables[2][2]" />4000</td>
  </tr>

然后:

<?php
  $tables = $_POST['tables'];
  foreach($tables as $table){
    if(isset($table[0]) && isset($table[2])) myFunction($table[0], $table[2]);
  }
?>

$tables[$x]包含单行。然后$tables[$x][0]是第一个<input>,依此类推。