【问题标题】:How to convert octal value to string in PHP?如何在 PHP 中将八进制值转换为字符串?
【发布时间】:2015-11-08 15:36:58
【问题描述】:

我的一个 Web 服务正在响应八进制 (010) 中的值,我想将此值用作数组中的键。

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

结果:

Array
(
    [8] => test
)

预期:

Array
(
    [010] => test
)

即使我进行类型转换,PHP 也将 010 值转换为 9,我尝试了 (string) $keysprintf('%s', $key) 但没有运气。

我们是否必须将八进制转换为字符串而不更改值?

【问题讨论】:

  • 您可以编写一个函数,将原始八进制数保留为保持格式的文字字符串。 Octal - From Wikipedia 有一些关于如何表示八进制文字的有用信息。使用小写的“o”作为前缀会很容易阅读,并且很明显它是一个八进制数。并且很容易转换回八进制数,当用作字符串键时,PHP 将不理会它。

标签: php octal


【解决方案1】:
$key = sprintf('%o', $key);

http://docs.php.net/manual/en/function.sprintf.php
(但是你的键是一个字符串,而不是一个整数)

编辑:不确定是否要始终打印前导 0

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

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

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

【讨论】:

  • 返回 10 而不是 010。
【解决方案2】:

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

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

【讨论】:

  • 返回 10 而不是 010。
  • 不错的收获。您需要明确添加 0 以使其按您的意愿工作。用八进制定义数字时需要零的唯一原因是解析器能够明确地告诉您您的意思。更新的答案(注意:这将适用于除零之外的所有内容,它将变为“00”)。
  • 我有可能得到 0010、00020、00001、00012131 等数字。我希望解决方案能够处理所有前导零。
  • 但是前导零没有意义。 01 等价于 0000001。 PHP 应该如何知道如何为您格式化数字?唯一的解决方案是提前从所有键中去除零以对其进行规范化。
猜你喜欢
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多