Hatena::ブログ(Diary)

たくあんのチラシ裏

【意外と知られていない?】SSDってこんなに速いのだ!

2012-04-15

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

【追記】

  • $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上手く付き合えば凄い楽しい!

とおりすがりとおりすがり 2014/04/04 16:34 オブジェクトでも、$foo->$barとするだけで参照プロパティを切り替えられます(むしろあっけなさすぎてびっくりです)。

とおりすがりとおりすがり 2014/04/04 16:34 オブジェクトでも、$foo->$barとするだけで参照プロパティを切り替えられます(むしろあっけなさすぎてびっくりです)。

aritekuariteku 2014/04/04 16:45 なるほど・・

aritekuariteku 2014/04/23 23:13 意外と検索でここに来られる方多いようなので、内容updateしたいです。。

To_aru_UserTo_aru_User 2014/10/20 14:55 個人的にはstdClassで扱う方がタイプ量が減って好きですね。やたら連想配列を押す人が居ますが、単にオブジェクト指向から逃げてるだけな感じの人もいてちょっと残念だなぁというのが正直な感想です。

とおりすがりとおりすがり 2015/06/14 16:26 ture ってアンタ……

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/ariteku/20120415/p2
リンク元