2015-08-15 89 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

相關問題