我将十几个三元组{year - month - day}
添加到HTML选择输入中。
目前我这样做:
<select name="period">
<option value="2014-10-23">
然后在PHP中:
explode('-', $_POST['period'])
我想知道PHP是否可以直接将这些值转换为不同的变量?
类似的东西:
<select name="year;month;day">
<option value="2014;10;23">
$_POST['year']
$_POST['month']
$_POST['day']
答案 0 :(得分:1)
你可以在这里试试(未经测试)
<select name="period">
<option value='{"year":2014,"month":10,"day":23}'>2014-10-23</option>
并将其转换为
$myDate = json_decode($_POST['period']);
echo "<pre>";
print_r($myDate);
echo "</pre>";
在这种情况下,您也可以轻松地将数据传递给javascript / ajax,因为您也可以将jsonString转换为数组。
答案 1 :(得分:1)
此处未经测试的代码
foreach($_POST as $key => $value){
$keys = explode(';',$key);
$values = explode(';',$value);
if(count($keys) > 1 && count($keys) === count($values)){
unset($_POST[$key]);
foreach($keys as $i=>$k){
$_POST[$k] = $values[$i];
}
}
}
将此添加到脚本的入口点,它应自动转换您描述的格式
答案 2 :(得分:1)
如果您想要多个字段,则必须发送多个字段
<input name="year" /><input name="month" />...
完全可以接受。您仍然可以为该字段设置样式,使它们看起来像一个字段。
如果您只想要一个字段,则必须在php中分割数据
list($year, $month, $day) = explode(';', $_POST['date']);
答案 3 :(得分:1)
我建议采用不同的方法:将日期存储在DateTime
对象中。基本上,你有一个变量($date
),它包含一个对象(一个PHP&#39; s DateTime
类的实例),你可以使用它的方法(在这种情况下, format()
方法)检索年,月,日和/或其他属性(例如星期几等)。
您可以使用现有的HTML:
<select name="period">
<option value="2014-05-22">May 22, 2014</option>
</select>
在处理输入的PHP脚本中,创建一个包含DateTime对象的变量$date
:
$date = new DateTime($_POST['period']);
通过初始化新的DateTime
对象并将日期(Y-m-d
格式)传递给它,DateTime
对象将自动保留正确的日期值。
现在,您可以在该对象上使用format()
方法来检索年,月和日:
echo $date->format('Y'); //2014
echo $date->format('m'); //05
echo $date->format('d'); //22
注意:DateTime::format()
接受与format
parameters相同的date()
function。
另请注意,即使您只传递了一个日期(也没有时间),$date
变量仍然保留一个完整的DateTime
对象。它的值在PHP内部存储为2014-05-22 00:00:00
,因此$date->format('H:i:s')
将返回00:00:00
。如果您只在Y
参数中使用m
,d
和format
,这当然不会产生任何影响。