Как преобразовать восьмеричное значение в строку в PHP?

Одна из моих веб-служб отвечает значением в восьмеричном виде (010), я хочу использовать это значение в качестве ключа в массиве.

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

Результат:

Array
(
[8] => test
)

Ожидаемый:

Array
(
[010] => test
)

PHP конвертирует значение 010 в 9, даже если я делаю приведение типов, я пытался (string) $key а также sprintf('%s', $key) но не повезло.

Есть ли в любом случае мы должны преобразовать восьмеричное в строку без изменения значения?

1

Решение

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

увидеть http://docs.php.net/manual/en/function.sprintf.php
(но тогда ваш ключ — это строка, а не целое число)

редактировать: не уверен, если вы хотите, чтобы всегда печатался лидирующий 0

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

или всегда получать ключ с тремя цифрами

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

Другие решения

В 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

По вопросам рекламы [email protected]