2010-03-22 17 views
4

我正在处理一个数据库,该数据库有一串以前导0开头的序列号。使用PHP八进制和字符串转换

所以序列号可以像00032432或56332432.

问题是用PHP我不明白与八进制转换系统是如何工作的。

一个具体的例子是,我试图转换和比较所有这些基于整数的字符串。

是否有可能将八进制数(例如00234)转换为像“00234”这样的字符串,以便我可以比较它?

编辑 - 添加一个特定的例子。我希望能够像下面那样在串行上运行str函数。

$serial = 00032432; // coming from DB 

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

     // do something 

    } 
+1

我不明白你的确切问题吗?值来自一个字符串,所以它不应该被视为一个八进制,直到你用它做了一些数学运算,比如在一个加法中使用它。你应该能够在字符串比较中使用它,不用担心。或者我误解了一些东西? – 2010-03-22 21:00:39

+0

在使用和比较之前,来自db的值是否分配给变量有什么关系?因为我无法像使用数字或没有前导零的字符串那样操纵这些变量。 – krx 2010-03-22 21:08:13

回答

4

当你(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如果您还想在你的字符串中零的数字的字符串表示从基转换为另一种

,你可以用简单的数学添加。

希望这可以帮助你。

+0

如何在运行base_convert之前知道它是否是八进制数?例如,我不想在非八进制上运行base_convert,因为它会更改值。有没有办法检查运行此功能之前,它会改变值?我只想在前导零的值上运行它。 – krx 2010-03-22 21:58:19

+0

我不明白你的意思。你可以从数据库中得到字符串格式的数字,我想。然后你有一个字符串,你可以检查零...但我想我不明白哪个是问题,所以如果你给我更详细的问题,用一个更详细的例子... – 2010-03-22 22:08:11

+0

我得到来自DB的字符串并将它们分配给变量。当我尝试在它们上运行字符串函数时,它们不能处理带前导零的数字(即00532),但是在没有前导零(即532)的数字上它可以正常工作。当我只对前导零的数字使用base_convert时,它可以正常工作,但是没有前导零的数字会被错误地转换。问题是我不知道哪些数字要使用base_convert函数,因为我不能确定它们是否具有前导零而不先转换它们。那有意义吗?我以前从来没有听说过八进制数=/ – krx 2010-03-22 22:17:01

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

这不起作用。我在if语句中添加了回显,但没有显示。 strval和其他函数(string)不能与这些八进制数一起使用?感谢您的协助! – krx 2010-03-22 21:09:33

+0

好吧,另一个问题,你如何得到这个变量是一个数字?从数据库中接收它后,你明确地将它转换为(int)吗?那么不要这样做,因为它实际上不是一个数字,而是一个字符串! – naivists 2010-03-23 04:52:44

1

为八进制转换为字符串,将它转换:

$str = (string) 00032432; 

可以八进制和十进制之间的转换与octdec功能和煎

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

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

+0

我曾经尝试过那些。八进制数仍然显示为它们的等值,而不是字符串。即 - echo octdec(decoct(045));当我希望它显示为字符串045时显示为37。 – krx 2010-03-22 21:12:11

0

数据库中的所有内容都自动成为一个字符串。整数是字符串,日期是字符串,狗是字符串。

如果你正在做的事情不可思议,转换到任何一个字符串:$a = (string) 12;

+0

我也试过这个。例如运行这个:$ a =(string)012; echo $ a; ....它的回声10不是012. – krx 2010-03-22 21:13:06

+0

@ krio有意义,因为八进制值在*字符串转换之前被转换*。不过,在你的例子中不应该是这种情况。 – 2010-03-22 21:51:33

+0

现在我读了它 - 我从数据库中获取变量,但是它在使用之前被赋值为一个值。它不直接插入到查询中。 – krx 2010-03-22 21:57:09

1
$str = sprintf('%o', $octal_value); 
相关问题