json_decodeの第二引数を「true」にして連想配列にすれば良かったのですが、見逃していて自力で配列にキャストした時に、よくわからないことが起こりました。
自力で配列へのキャスト
<?php
$arr = array(1 => 'hoge',
'a' => 'fuga',
2 => 'piyo',
'b' => 1234,
);
$json = json_encode($arr);
var_dump($json);
$json_arr = (array)json_decode($json);
var_dump($json_arr);
foreach ($json_arr as $k => $v) {
var_dump($json_arr[$k]);
}
このコードの実行結果は以下の様になりました。
エラーが出るのでキーに「"1"」の文字列が入ったのかなとか思ったのですが、結局そのキーを指定しても、ダメでした。
結局なぜダメなのかはわからずですが、json_decodeの第二引数を「true」にした場合は、問題なかったのでそちらでやるようにしました。
原因知りたいですが、未だわからずです。
第二引数に「true」を師弟
<?php
$arr = array(1 => 'hoge',
'a' => 'fuga',
2 => 'piyo',
'b' => 1234,
);
$json = json_encode($arr);
var_dump($json);
$json_arr = json_decode($json, true);
var_dump($json_arr);
foreach ($json_arr as $k => $v) {
var_dump($json_arr[$k]);
var_dump($json_arr[(string)$k]);
}
このコードの実行結果は以下の様になりました。
jsonから配列に変換する時は、json_decodeを利用するとキーが数字の場合は、int型のキー配列に変換してくれるようです。
0 件のコメント:
コメントを投稿