Работа с PHP-восьмеричными и строковыми преобразованиями - PullRequest
5 голосов
/ 22 марта 2010

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

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

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

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

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

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

  $serial = 00032432; // coming from DB

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

        // do something

   } 

Ответы [ 5 ]

5 голосов
/ 23 марта 2010

Когда вы конвертируете с помощью (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 преобразует строковое представление числа из базы в другое

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

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

1 голос
/ 09 августа 2015
$str = sprintf('%o', $octal_value);
1 голос
/ 23 марта 2010

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

$str = (string) 00032432;

Вы можете преобразовать восьмеричное и десятичное с помощью функций octdec и decoct

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

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

0 голосов
/ 23 марта 2010

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

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

0 голосов
/ 23 марта 2010
$serial = 00032432; //here you have an octal number
$serial= strval($serial); //now you have a string
if ($serial[0]=="0") {
 //do something
}
...