PHP Конкатенация Ноль на сегодняшний день значение POST - PullRequest
2 голосов
/ 05 марта 2012

Мне нужно добавить ноль к значению даты, которое публикуется, поскольку значение даты 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>

Ответы [ 5 ]

4 голосов
/ 05 марта 2012

Вам необходимо обновить foreach до

foreach ($dates as &$date)

В настоящее время $date является новым символом и не будет перезаписывать значение. Это должно исправить это, но может быть неплохо иметь правильные строки в опциях. Вы можете использовать str_pad для этого.

2 голосов
/ 05 марта 2012

При выполнении foreach переменная элемента $date является новой переменной, копией значения из массива.Вы должны использовать ключ и обновить исходный массив.

foreach($dates as $key => $date) {
if (strlen($date) == 1) {
    $dates[$key] = '0' . $date;
}
}

Кроме того, вы запускаете этот код на year, вы не хотите добавлять ноль к году, толькомесяц и день.

1 голос
/ 05 марта 2012

Вы можете сделать это немного проще, просто используя 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'
1 голос
/ 05 марта 2012

Проверьте функцию строковых клавиш 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)

0 голосов
/ 05 марта 2012

используйте sprintf () Например:

$date = sprintf('%02d', $_POST['photos_day']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...