php плюс число сохраняйте ноль в качестве первого символа

#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
?>
 

Нажмите, чтобы узнать больше о str_pad

Ответ №3:

PHP взял полезную функцию из Perl: возможность увеличивать строки, используя . К сожалению, это получилось не очень хорошо. Если вы увеличиваете "A0001" , вы получаете "A0002" ; но если вы увеличиваете "0001" , вы получаете 2 (в отличие от оригинального Perl, который дал бы вам "0002" ). Но вы можете обмануть:

 $i="0001";
$j=":$a";
$j  ;
$j=substr($j, 1);
 

Это больше для того, чтобы проиллюстрировать классную вещь, о которой могут знать немногие люди, и то, как она была неправильно реализована, чем для предоставления реального решения; Я определенно предпочел бы видеть str_pad sprintf решение или в своем коде.