我需要在发布的日期值上添加一个零。MySQL日期值将用作显示添加照片的目录路径。目前目录保存为2012-2-5,MySQL条目为2012-02-05。
我尝试了以下方法,但似乎不起作用:
$dates = array($_POST['photos_year'], $_POST['photos_month'], $_POST['photos_day']);
foreach($dates as $date) {
if (strlen($date) == 1) {
$date = '0' . $date;
}
}
$photos->date = $dates[0] . "-" . $dates[1] . "-" . $dates[2];
我正在使用for循环来创建日期表单,对我来说编辑它可能更容易,但我没有任何成功:
<select name="photos_month" id="photos_month" tabindex="3">
<option value ="">- Month -</option>
<?php
for($date=01;$date<=12;$date++) {
if (isset($photos) && $date==$month) {
echo "<option value='".$date."' selected='selected'>".$date."</option>";
} else {
echo "<option value='".$date."'>".$date."</option>";
}
}
?>
</select>
您需要将foreach
更新为
foreach ($dates as &$date)
当前,$date
是一个新符号,不会覆盖该值。这应该可以解决问题,但在选项中也有正确的字符串可能会很好。您可以使用str_pad
来执行此操作。
$date
是一个新变量,是数组中值的副本。您应该使用一个键并更新原始数组。
foreach($dates as $key => $date) {
if (strlen($date) == 1) {
$dates[$key] = '0' . $date;
}
}
此外,您正在year
上运行该代码,您不希望在年份中添加零,只希望在月份和日期中添加零。
只需使用带有格式字符串的sprintf,就可以让它变得简单一点;
$photos_year = '2012';
$photos_month = '2';
$photos_day = '5';
$result = sprintf("%4d-%02d-%02d", $photos_year, $photos_month, $photos_day);
// $result = '2012-02-05'
查看字符串填充功能http://php.net/manual/en/function.str-pad.php
连同数组映射函数http://php.net/manual/en/function.array-map.php
将这两者结合使用将允许您遍历日期的每个部分(array_map),并用0(使用str_pad)填充该值
代码看起来像这个
$dates = array_map("padString",$dates);
function padString($string) {
return str_pad($string,2,"0",STR_PAD_LEFT);
}
print_r($dates);
//为您提供阵列([0]=>2012[1]=>02[2]=>05)
使用sprintf()例如:
$date = sprintf('%02d', $_POST['photos_day']);