Я работаю с базой данных, в которой есть куча серийных номеров с префиксами с ведущими 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;