2011-10-29 41 views
4

我一年寫了所有月份的數組如下:鍵中的字符串變爲整數?

$MNTH["01"] = "January"; 
$MNTH["02"] = "February"; 
$MNTH["03"] = "March"; 
$MNTH["04"] = "April"; 
$MNTH["05"] = "May"; 
$MNTH["06"] = "June"; 
$MNTH["07"] = "July"; 
$MNTH["08"] = "August"; 
$MNTH["09"] = "September"; 
$MNTH["10"] = "October"; 
$MNTH["11"] = "November"; 
$MNTH["12"] = "December"; 

當我做一個變量轉儲上的$MNTH鍵與var_dump(array_keys($MNTH)), 我得到:

array(12) { 
[0]=> string(2) "01" 
[1]=> string(2) "02" 
[2]=> string(2) "03" 
[3]=> string(2) "04" 
[4]=> string(2) "05" 
[5]=> string(2) "06" 
[6]=> string(2) "07" 
[7]=> string(2) "08" 
[8]=> string(2) "09" 
[9]=> int(10) 
[10]=> int(11) 
[11]=> int(12) } 

我期待最後三個鍵的字符串。它是如何變成整數的?我應該怎麼做才能糾正這種現象?

+1

http://php.net/manual/en/language.types.type-juggling.php – GWW

+2

啊,動態類型語言的奇蹟... – nfechner

回答

6

PHP在您創建數組元素時將數字鍵轉換爲整數。這不是array_keys。但是有一個黑客獲得串數字鍵:

$a = new stdClass; 
$a->{"0"} = "zero"; 
$a = (array) $a; 
var_dump($a); 

輸出:

array(1) { 
    ["0"]=> 
    string(4) "zero" 
} 

但你將無法通過下標來訪問該密鑰,所以它不是非常有用的。

如果你必須有字符串鍵,你需要與其他非數字(或零)字符前綴他們:

$MNTH["001"] = "January"; 
$MNTH["012"] = "December"; 

documentation

的關鍵可能是一個整數或一個字符串。如果一個鍵是一個整數的標準表示,它將被解釋爲這樣(即「8」將被解釋爲8,而「08」將被解釋爲「08」)。浮點鍵被截斷爲整數。索引和關聯數組類型在PHP中是相同的類型,它們都可以包含整數和字符串索引。

+0

感謝您的全面解釋和答案:) –

0

PHP根據上下文確定變量的類型,所以10,11,12被認爲是整數。 如果你想迫使他們是字符串您可以轉換爲字符串,這樣

$MNTH[(string)"11"] = "November"; 

或連接一個空字符串。

$MNTH["11".""] = "November"; 
+0

兩個那些例子實際上產生相同的結果。 –

+0

不,我試過了,你的方法不起作用。兩者仍然是整數。 –

0

爲什麼你不做一個關聯數組?

$MNTH = array(
     array("01" => "January"),array("02"=>"February"),array("03"=>"March"), 
      ... snip ... 
     array("12"=>"December") 
      ); 
+0

爲什麼我想通過在數組中引入數組使其更復雜? –

+0

它只是使迭代數據和輸出月份而不訴諸黑客更容易。 – Mina