Одна из моих веб-служб отвечает значением в восьмеричном виде (010), я хочу использовать это значение в качестве ключа в массиве.
$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);
В 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);