Понимание str_pad () с ведущими нулями

Я пытаюсь построить php-функцию и обнаружил какое-то странное поведение, и я даже не могу сформулировать правильный вопрос, поэтому, если кто-нибудь сможет объяснить, что происходит, я был бы признателен.

Я работаю с набором чисел с ведущими нулями, и важно, чтобы они поддерживались, но пользователи почти никогда не вводят ведущие нули. Поэтому я использую это:

$x = 123; $n = 5; $x = str_pad((int)$x,$n,"0",STR_PAD_LEFT); echo $x; 

и, по желанию, это получает меня 00123.

Странный материал происходит, когда я тестировал пользователя, вводящего нуль перед их номером

 $x = 0123; $n = 5; $x = str_pad((int)$x,$n,"0",STR_PAD_LEFT); echo $x; 

Это возвращает 00083. То же самое происходит, если пользователь должен был ввести 00123.

Этот результат полностью меня озадачил. Заранее благодарим за любое объяснение того, что здесь происходит.

Solutions Collecting From Web of "Понимание str_pad () с ведущими нулями"

Целочисленные литералы, начинающиеся с 0 , интерпретируются базой 8 . Ваш второй $x имеет значение 83. Подробнее см. Руководство по целым числам .

Функция intval() позволяет указать базу, если вы читаете пользовательскую строку.

Если мы говорим о литералах, то в PHP литерал 0 является десятичным, а в C и C ++ – восьмеричным. Это небольшие различия, которые делают жизнь забавой.