PHP prepend wiodące zero przed liczbą jednocyfrową, on-the-fly

PHP - czy istnieje szybka metoda testowania pojedynczego ciągu znaków, a następnie poprzedzania wiodącego zera?

Przykład:

$year = 11;
$month = 4;

$stamp = $year.add_single_zero_if_needed($month);  // Imaginary function

echo $stamp; // 1104
Author: Ben, 2011-04-14

4 answers

Możesz użyć sprintf: http://php.net/manual/en/function.sprintf.php

<?php
$num = 4;
$num_padded = sprintf("%02d", $num);
echo $num_padded; // returns 04
?>

Doda zero tylko wtedy, gdy jest mniejsza niż wymagana liczba znaków.

Edit: jak zauważył @FelipeAls:

Podczas pracy z liczbami należy używać %d (zamiast %s), zwłaszcza gdy istnieje potencjał dla liczb ujemnych. Jeśli używasz tylko liczb dodatnich, każda z tych opcji działa dobrze.

Na przykład:

sprintf("%04s", 10); zwroty 0010
sprintf("%04s", -10); zwraca 0-10

Gdzie jako:

sprintf("%04d", 10); zwroty 0010
sprintf("%04d", -10); zwraca -010

 382
Author: Kirk Beard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-25 09:53:19

Możesz użyć str_pad do dodawania 0 ' s

str_pad($month, 2, '0', STR_PAD_LEFT); 

string str_pad ( string $input , int $pad_length [, string $pad_string = " " [, int $pad_type = STR_PAD_RIGHT ]] )

 156
Author: Gaurav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-15 07:00:05

Uniwersalne narzędzie do formatowania łańcuchów, sprintf:

$stamp = sprintf('%s%02s', $year, $month);

Http://php.net/manual/en/function.sprintf.php

 16
Author: deceze,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-14 05:50:40

Wygląda na to, że potrzeba wielu linii, żeby to zadziałało. Używam tego krótkiego if funkcjonalności i daje taki sam wynik jak OP chce.

$month = 8;
echo ($month < 10 ? '0'.$month : $month); // output: 08

I wyświetlenie poprawnego wyjścia zajmuje tylko 1 linię

 5
Author: Abdel Rahman Rizk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-08 14:01:16