2011-10-29 16 views
4

次のように私は年にすべての月の配列を書いています:私はvar_dump(array_keys($MNTH))$MNTHのキーの変数ダンプ、 を行うと鍵の文字列は整数になりますか?

$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"; 

は私が取得:

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) } 

私がいました最後の3つのキーの文字列が必要です。どのように整数になりましたか?この現象を修正するにはどうすればよいですか?

+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" 
} 

しかし、あなたは下付きでそのキーにアクセスすることができなくなりますので、それは非常に便利ではありません。

あなたは文字列キーを持たなければならない場合は、別の非数値(またはゼロ)の文字でそれらをプレフィックスする必要があります:documentationから

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

キーとすることができます整数または文字列のいずれかです。キーが整数の標準表現である場合、それはそのように解釈される(すなわち、「8」は「8」と解釈され、「08」は「08」と解釈される)。 keyのfloatは整数に切り捨てられます。インデックス型配列と連想配列型は、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

関連する問題