#php #variables #numbers
Вопрос:
У меня есть этот код:
$i = '0001';
$j = $i 1;
Я хочу получить 0002, но это дает мне только 2
Как я могу добавить $i и сохранить эти 000?
Спасибо
Комментарии:
1. Используется
sprintf()
для форматирования числа определенным образом. Что-то похожееsprintf('d', $j)
или похожее.2. Числовые типы не имеют начальных нулей, но строки могут.
Ответ №1:
Может быть, это может навести вас на мысль:
$i = '0001';
$i = intval($i);
$i ;
$a = '000';
$result = $a.$i;
echo $resu<
.
Между $a
и $i
объединяет переменные в строку, сохраняя в них каждый символ.
Приведенный выше код выведет 0002
Проверьте это здесь: http://sandbox.onlinephpfunctions.com/code/fc2bd5861a6c0d937568b067e98e06977741019c
Если вы хотите сохранить все начальные нули, вы можете посчитать их отдельно и увеличить их вот так. Конечно, это то, что быстро получается, и я на 100% уверен, что есть гораздо лучшие способы сделать это.
Комментарии:
1. Проблема здесь в том, что как только значение достигает
10
выходного значения, оно становится пятизначной строкой:00010
. Иstr_pad()
то и другое, иsprintf()
избегайте этого.2. Это очень верно; тот случай действительно вылетел у меня из головы! Действительно, два других подходят для этого лучше, чем то, что я предложил, по той самой причине, по которой я написал последнюю часть.
Ответ №2:
Вы можете использовать str_pad, чтобы сохранить начальные нули.
Код здесь,
<?php
$i = '0001';
$val = $i 1;
echo str_pad($val,4,"0",STR_PAD_LEFT); // 0001
?>
Ответ №3:
PHP взял полезную функцию из Perl: возможность увеличивать строки, используя
. К сожалению, это получилось не очень хорошо. Если вы увеличиваете "A0001"
, вы получаете "A0002"
; но если вы увеличиваете "0001"
, вы получаете 2
(в отличие от оригинального Perl, который дал бы вам "0002"
). Но вы можете обмануть:
$i="0001";
$j=":$a";
$j ;
$j=substr($j, 1);
Это больше для того, чтобы проиллюстрировать классную вещь, о которой могут знать немногие люди, и то, как она была неправильно реализована, чем для предоставления реального решения; Я определенно предпочел бы видеть str_pad
sprintf
решение или в своем коде.