Search code examples
phpstringoctal

Working with PHP Octals and String conversions


I'm working with a database that has a bunch of serial numbers that are prefixed with leading 0's.

So a serial number can look like 00032432 or 56332432.

Problem is with PHP I don't understand how the conversion system with octals works.

A specific example is that I'm trying to convert and compare all of these integer based numbers with strings.

Is it possible to convert an octal, such as 00234 to a string like "00234" so that I can compare it?

edit - adding a specific example. I would like to be able to run str functions on the serial like below.

  $serial = 00032432; // coming from DB

  if(substr($serial, 0, 1) == '0') {

        // do something

   } 

Solution

  • When you convert with (string) $number, you always get a string in decimal base, it doesn't matter if you write the number in octal mode or in decimal mode, an int is an int and it has not itself a base. It's his string representation that have to be interpreted with a base.

    You can get the octal string representation of a number in this way:

    $str = base_convert((string) 00032432, 10, 8);
    

    or giving the number in decimal rep:

    $str = base_convert((string) 13594, 10, 8);    
    

    or, more concisely but less clearly:

     $str = base_convert(00032432, 10, 8);
     $str = base_convert(13594, 10, 8);
    

    In the last the string conversion is made implicitly. The examples give all as result $str = "32432".

    base_convert converts a string representation of a number from a base to another

    If you want also the zeros in your string, you can add them with simple math.

    Hope this can help you.