通过有一个date()
从中减去和整数的字符串(的输出),您最终会将结果转换为整数,而不是字符串。您最好从正确地开始字符串并摆脱整数算术问题。
我建议使用 DateTime 对象。以下是输出输入字段的方式。
<?php
$current_date = new DateTime();
while($i = 1; $i <= 4; $i++) {
$date_int = new DateInterval('P' . (string)$i . 'Y');
$temp_date = $current_date->sub($date_int);
$date_string = $temp_date->format('Y');
?>
<input type="number" name="<?php echo $date_string; ?>brand%gross" placeholder="Gross Sales % for <?php echo $date_string; ?>" />
<?php
} // end while
?>
处理时,$_POST
您可以执行类似操作:
<?php
$current_date = new DateTime();
$year_array = array();
while($i = 1; $i <= 4; $i++) {
$date_int = new DateInterval('P' . (string)$i . 'Y');
$temp_date = $current_date->sub($date_int);
$date_string = $temp_date->format('Y');
if (!empty($_POST[$date_string. 'brand%gross'])) {
$year_array[$date_string] = $_POST[$date_string . 'brand%gross'];
}
} // end while
?>
请注意,我使用数组来存储按年份字符串索引的数据,因为您不能拥有以数字开头的变量名称(即$2013nrand%gross
无效)。
我还强烈建议在您的输入中使用数组访问表示法来简单地处理事情。
如果您像这样进行每个输入:
<input type="number" name="year_brand_gross[<?php echo $date_string; ?>]" placeholder="Gross Sales % for <?php echo $date_string; ?>" />
然后year_brand_gross[2013]
,诸如此类的名称将自动作为数组填充到$_POST['year_brand_gross']
中,从而无需遍历 POST 输入。
相反,您可以将其设置为这样的变量
if(!empty($_POST['year_brand_gross']) {
$year_array = $_POST['year_brand_gross'];
}
对于 PHP < 5.3.0,您可以使用替代方法生成年份字符串:
$current_date = new DateTime();
for ($i = 1; $i <=4; $i++) {
$current_date->modify('-1 year');
$date_string = $current_date->format('Y');
// other code here
}
请注意,如图所示,这将改变$current_date
每个迭代的值,这与第一个解决方案不同。