Работа с преобразованиями PHP Octals и String

Я работаю с базой данных, в которой есть куча серийных номеров с префиксами с ведущими 0.

Таким образом, серийный номер может выглядеть как 00032432 или 56332432.

Проблема с PHP Я не понимаю, как работает система конверсии с восьмеричными.

Конкретным примером является то, что я пытаюсь преобразовать и сравнить все эти числа на основе целых чисел со строками.

Можно ли преобразовать восьмеричную, такую ​​как 00234, в строку типа "00234", чтобы я мог ее сравнить?

edit - добавление конкретного примера. Я хотел бы иметь возможность запускать функции str в последовательном порядке, как показано ниже.

  $serial = 00032432; // coming from DB

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

        // do something

   } 

Ответ 1

Когда вы конвертируете с помощью (string) $number, вы всегда получаете строку в десятичной базе, неважно, записываете ли вы число в восьмеричном режиме или в десятичном режиме, int - это int и он сам не является базой, Это его строковое представление, которое должно быть интерпретировано базой.

Вы можете получить восьмеричное строковое представление числа следующим образом:

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

или задание числа в десятичном представлении:

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

или, более кратко, но менее четко:

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

В последнем случае преобразование строк выполняется неявно. Примеры дают все как результат $str = "32432".

base_convert преобразует строковое представление числа из базы в другую

Если вы хотите также нули в своей строке, вы можете добавить их с помощью простой математики.

Надеюсь, это поможет вам.

Ответ 2

Чтобы преобразовать восьмеричную строку в строку, произведите ее:

$str = (string) 00032432;

Вы можете конвертировать между восьмеричным и десятичным с функциями octdec и decoct

<?php
echo octdec('77') . "\n";
echo octdec(decoct(45));
?>

http://uk.php.net/manual/en/function.octdec.php

Ответ 3

$str = sprintf('%o', $octal_value);

Ответ 4

$serial = 00032432; //here you have an octal number
$serial= strval($serial); //now you have a string
if ($serial[0]=="0") {
 //do something
}

Ответ 5

Все из базы данных автоматически является строкой. Целые строки - это строки, даты - строки, собаки - строки.

Если вы делаете что-то странное, преобразуйте что-нибудь в строку: $a = (string) 12;