Я пытаюсь построить 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.
Этот результат полностью меня озадачил. Заранее благодарим за любое объяснение того, что здесь происходит.
Целочисленные литералы, начинающиеся с 0
, интерпретируются базой 8 . Ваш второй $x
имеет значение 83. Подробнее см. Руководство по целым числам .
Функция intval()
позволяет указать базу, если вы читаете пользовательскую строку.
Если мы говорим о литералах, то в PHP литерал 0
является десятичным, а в C и C ++ – восьмеричным. Это небольшие различия, которые делают жизнь забавой.