-1

我真的一直在为此绞尽脑汁。我会尽力解释它。它主要是一个数据输入表格。

首先,要从三个变量开始。一个是区域数组(NYC、DC 等),另一个是开始日期(例如:2012 年 1 月 1 日)和结束日期(例如:2012 年 1 月 15 日)

在前面的页面中,用户选择了区域的数量,选择了开始录制的开始日期和结束日期。目的是输入“积分”,日期基本上是按周。

这是表单的样子:http: //i.imgur.com/9XflP2Z.png

在除第一列第一行之外的框中,都是输入框。因此,每个输入框都与表格每一端的值相关联(例如,NYC 旁边和 2012 年 1 月 1 日下方的框将输入 2012 年 1 月 1 日至 01 日期间 NYC 的数据08/2012)。

我的问题是:我该如何构建这个?我应该使用一个大的二维数组吗?提交按钮如何知道哪些输入框对应于哪个日期/区域?我最初的想法可能是一个隐藏值,例如 $array[0][x]、$array[x][0],但我不确定。

我不是很擅长解释,所以如果有人不明白我在问什么,我提前道歉。

4

2 回答 2

1

尝试这个:

// hard coding these values for example
// but for OP's case these might be coming from a previous page 
$date_array = Array("01/01/2012", "01/08/2012", "01/15/2012");
$region_array = Array("NYC", "DC");

现在在您的图像中生成该表单/表格,如下所示:

<form name="test_form" id="test_form" action="submit_form.php" method="POST">
    <table border="1">
        <tr>
             <td></td>
             <?php
                 foreach ($date_array as $date){
                     echo "<td>".$date."</td>";
                 }
             ?>
         </tr>
         <?php
         foreach ($region_array as $region){
            echo "<tr>";
            echo "<td>".$region."</td>";
            foreach ($date_array as $date){
                echo "<td><input type=\"text\" name=\"".$region."_".$date."\"></td>";
            }
            echo "</tr>";
        }
       ?>
    </table>
    <input type="submit" name="submit">
</form>

现在为 submit_form.php:

if (isset($_POST['submit'])){
    foreach ($_POST as $k=>$v){
        if ($k != "submit"){
            // split the form input on _
            $input = explode("_", $k);
            echo "<BR>City: " . $input[0];
            echo "<BR>Date: " . $input[1];
            echo "<BR>Value: " . $v;
        }
    }
}
于 2013-07-23T00:50:24.530 回答
1

这是一个常见问题的变体。

原则上,foreach 语句可能是最好的选择。伪代码:

将所有可能的日期范围整理成一个数组(array_merge、array_unique、array_sort)以生成标题

foreach($region as $dates) { 如果是 in_array of dates,则显示 $date['startdate'] 的按钮;如果在日期数组中,则显示 $date['enddate'] 的按钮;重复... }

您将遇到的最大问题是处理布局。显而易见的解决方案(冒着被激怒的风险)是使用 HTML 表格。这很简单并且会自动调整。

$nextline="<TR>";
if(is in_array($datetotest,$listofdates))
    {
    $nextline.="<TD><CODE FOR BUTTON></TD>";
    }
    else
    {
    $nextline.="<TD><BR></TD>";
    }

您的替代解决方案(可能更简洁)是将所有按钮包含在合适的跨度或其他标签中,并使用 CSS 整齐地排列它们。这为您提供了更多布局选项,但对于任意大的数据集可能会有点令人头疼。

于 2013-07-23T00:23:45.283 回答