如何将八进制值转换为PHP中的字符串?
问题描述:
我的一个网站服务的响应值是八进制(010),我想将此值用作数组中的键。如何将八进制值转换为PHP中的字符串?
$key = 010;
$a[$key] = 'test';
print_r($a);
结果:
Array
(
[8] => test
)
预计:
Array
(
[010] => test
)
PHP是010值转换为9连我自己的类型转换,我想(string) $key
和sprintf('%s', $key)
但没有运气。
是否有无论如何我们必须将八进制转换为字符串而不更改该值?
答
$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
答
在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);
您可以编写一个函数,将原始八进制保留为文本字符串,以保持格式化。 [Octal - 来自维基百科](https://en.wikipedia.org/wiki/Octal)有关于如何表示八进制文字的一些有用信息。使用小写字母'o'作为前缀可以很清楚地阅读,显而易见,它是一个八进制数。将它转换回八进制数很容易,PHP在作为字符串键使用时将不再使用它。 –