2012年1月27日金曜日

PHP json_decode ではまったこと

配列をjsonに変換し、POSTした画面先で再度配列に直す処理を書いていたときにはまったこと。

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 件のコメント:

コメントを投稿