PHP将零连接到最新POST值


PHP Concatenate Zero to date POST value

我需要在发布的日期值上添加一个零。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来执行此操作。

执行foreach时,元素变量$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']);