I don’t know how to google this one out so I an asking it here. Why does it happen that when I declare a variable
$something = 0759 that it turns into 61. I know the answer must be very simple so please forgive my sillyness.
It is an Integer literal, you declare a octal number with a leading zero.
$something = 0759; // octal
The octal numeral system is a base-8 number system.
You can only use Numbers between 0-7 (other numbers are discarded).
$a = 0759; $b = 075; var_dump($a==$b); // bool(true)
You could skip the zeros with ltrim.
$a = ltrim("0759", 0); echo $a; // 759 // and reformat as suggested with str_pad or printf echo str_pad($a, 4, "0", STR_PAD_LEFT);
Why does it happen
In PHP (and most programming languages), numbers preceding with a
0 is treated as an octal number. It’s a base-8 number system and has digits from 1-7.
Octal 0759 is equivalent to octal 075 (9 is discarded because there’s no 9 in the octal system). Octal 075 is equivalent to decimal 61. PHP actually stores the number as octal, but when output with
echo it’s always in decimal, so 075 becomes 61.
See Wikipedia on Octal to Decimal conversion. But this should give you a basic idea:
(075)8 = (0 x 8^2) + (7 x 8^1) + (5 x 8^0)
(075)8 = 0 + 56 + 5
(075)8 = 61
7 * 8 = 56 5 * 1 = 5 ==== 61
How to resolve this issue
Simply store the numbers as integers / strings and format them on output.
echo sprintf('%04d', $number); // 0759
echo str_pad($number, 4, '0', STR_PAD_LEFT); // 0759
If you really want to preserve the leading zero, then store it as a string:
$number = '0759';
Numbers starting with 0 can be treated as octal number notation by the PHP compiler.
You can find more details here:
Use numbers starting with 0 in a variable in php
When you assign a number to avariable starting with 0, its assumed to be octal, in your case (0759) 9 is not an octal digit, hence ignored, 75 octal converted to decimal is 61.
number starting with 0 is octal but in octal you can use 0-7 not 9 so 0759 will cast to 075 and 075 in octal is 61 in decimal