2015-08-15 87 views
1

我的一个网站服务的响应值是八进制(010),我想将此值用作数组中的键。如何将八进制值转换为PHP中的字符串?

$key = 010; 
$a[$key] = 'test'; 
print_r($a); 

结果:

Array 
(
    [8] => test 
) 

预计:

Array 
(
    [010] => test 
) 

PHP是010值转换为9连我自己的类型转换,我想(string) $keysprintf('%s', $key)但没有运气。

是否有无论如何我们必须将八进制转换为字符串而不更改该值?

+0

您可以编写一个函数,将原始八进制保留为文本字符串,以保持格式化。 [Octal - 来自维基百科](https://en.wikipedia.org/wiki/Octal)有关于如何表示八进制文字的一些有用信息。使用小写字母'o'作为前缀可以很清楚地阅读,显而易见,它是一个八进制数。将它转换回八进制数很容易,PHP在作为字符串键使用时将不再使用它。 –

回答

1
$key = sprintf('%o', $key); 

看到http://docs.php.net/manual/en/function.sprintf.php
(但当时你的密钥是一个字符串,而不是一个整数了)

编辑:不知道,如果你想领先的0总是被印刷

$key = sprintf('0%o', $key); 

或总是得到一个三位数的密钥

$key = sprintf('%03o', $key); 
+0

它正在返回10而不是010. – LoganPHP

0

在PHP(以及其他语言)中,允许使用这些类型的声明,但在编译/解析时总是将其转换为十进制整数(内部为二进制)。所以当脚本运行时,$key将始终为8。如果你想使用八进制值作为一个键,你可以将数字格式化为其他的基数(它将被表示为一个字符串)。

$num = 8; 
$key = $num === 0 ? '0' : '0' . decoct(8); // works for all numbers 0 and up 
$a[$key] = 'test'; 
print_r($a); 
+0

它正在返回10而不是010. – LoganPHP

+0

不错。你需要明确地添加一个'0'来使其工作。定义八进制数时需要零的唯一原因是解析器能够明确地分辨出您的意思。更新答案(注意:这将适用于除零之外的所有内容,将变为'00')。 – Anonymous

+0

我有可能得到像0010,00020,00001,00012131等数字我想要解决方案照顾所有前导零。 – LoganPHP

相关问题