読者です 読者をやめる 読者になる 読者になる

log

日記です

json_decode()先輩、引数渡せば連想配列になるんすね

PHP

【追記】

  • $foo->$barとするだけで参照プロパティを切り替えられる
  • 確かに第二引数でtrueを渡せば連想配列になる

【この記事を一言で言うと】

  • $hoge = json_decode($json);で作られたオブジェクト(stdClass)
    • $hoge->$foo->$barでアクセス。
  • $hoge = json_decode($json, true);で作られたオブジェクト(連想配列)
    • $hoge['foo']['bar'];でアクセス。
                                                                              • -

にゃー
引数渡さずにjson_decodeするとstdClassでデータ構造が作られる。
第二引数でtrue渡せば連想配列でデータ構造が作られる。

// stdClassのメンバへアクセス方法
$hoge = json_decode($json);
echo $hoge->foo->bar;

// 連想配列へのアクセス方法
$hoge = json_decode($json, true);
echo $hoge['foo']['bar'];
*/

連想配列でアクセスできると何が嬉しいのか

keyを変数で指定できる。
カッコ記法なら、keyを変数で指定できるためロジックで参照する変数を変えれる!
が、stdClassのメンバへ「->」ってアクセスする方法だと、(多分)リテラルでしかアクセス出来ないのでめんどい。ロジックで参照するメンバを動的に変える、っていうのはどうにかして出来る気はするんだけど、そんな事するより連想配列を使ったほうがふるゆわで楽チン。
上の例だと

$hoge->foo->bar;

のfooを動的に変えたい場合、stdClassだとぶっちゃけどうやるか分かんない…

$key = "foo";
$hoge[$key]['bar'];

なら$keyを動的に変えて、見に行く変数を変えることが出来る。
アクセッサー作ったりしてどうにかやる事はできると思うが、めんどーい。

筋の良いコーディング

PHP先輩なにげに上手くやらないとめんどすなカンジがするので、筋のいい情報、ベストプラクティスなやり方を身に着けておきたーい。
そしてなんか体調悪いな!
風邪うつった?
もう少し頑張るつもりだったけど、帰って寝よう!

ついでに便利な奴ら

$setting = json_decode(file_get_contents('./setting.json'), true);

的な感じで定数とかをjsonに書き出してプログラムで読み込んで使うの熱い。
でも本当はyamlがいいなー
今回は気分でjsonで。
file_get_constantsはhttp経由でも使えるんだったっけ
情報を外部のDBとかに持たせて、jsonをインターフェースに読み取る、なんてこともできる。
なんて贅沢なプログラミング。贅沢にリソースを使う。しかしまぁいいだろ。
php上手く付き合えば凄い楽しい!