$a=array("0"=>"zero","A"=>"B"); $b=json_decode(json_encode($a)); $c=(object)$a; var_dump($b===$c);
今度は配列に文字列のキーがあるからオブジェクト化してくれるに違いない!だからtrue!
外れです。falseなんです。
$bと$cをvar_dumpした結果はこちら
object(stdClass)#2 (2) { ["0"]=> string(4) "zero" ["A"]=> string(1) "B" } object(stdClass)#3 (2) { [0]=> string(4) "zero" ["A"]=> string(1) "B" }
zeroのキーが違う!と言うかキーの型が違う!キーの型なんて意識したことねーよォ
例によってjson_decodeのリファレンスを参考に$bのプロパティ0は$b->{'0'}でアクセス出来るのですが、$cのプロパティ0へ直接アクセス出来ません。
print $c->{'0'}; print $c->{"0"}; //print $c->0;//そもそもコンパイルエラー print $c[0];//そもそも配列じゃないって
全てエラーです。
直接出来ないなら間接的にやればいいじゃないって、つまりforeachで回すわけです。
foreach($c as $key=>$value){ print "{$key}:{$value}n"; } // 0:zero // A:B
それか、配列にキャストしてやれば間接的だけどforeachより直接的にアクセス出来ますね
$a=array("0"=>"zero","A"=>"B"); $c=(object)$a; $d=(array)$c; print $d["0"];
って言うか二回もキャストして無駄だよね。
$a=array("0"=>"zero","A"=>"B"); $c=(object)$a; $d=(array)$c; print $d["0"];
つまりこういう事だよね。
$a=array("0"=>"zero","A"=>"B"); print $d["0"];
オブジェクトどこいった。そういう事です。
こっちでも不可能という結論に。いやまあforeachで回せば出来…るに入らない? [PHP] オブジェクトでプロパティ名がInteger型のものにアクセスする方法 | gdgdな人がgdgdに書く、gdgdな皆様のためのブログ > Not Classified