PHPでオブジェクトを配列に変換

  • 57
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

オブジェクトを配列にしたい場合、arrayキャストを使うとオブジェクトがネストしている場合にうまく行かないが、json_encode関数、json_decode関数を使うとシンプルに出来た。

json_decode関数で第二引数で連想配列形式で返すかどうかを指定出来るので、それを利用する。

<?php

class Foo
{
    public $pub_var = "foo_pub";
    private $pri_var = "foo_pri";
    public $bar;

    public function __construct()
    {
        $this->bar = new Bar();
    }
}

class Bar
{
    public $pub_var = "bar_pub";
    private $pri_var = "bar_pri";
}

$foo = new Foo();
var_dump((array)$foo);
// array(3) {
//   'pub_var' =>
//   string(7) "foo_pub"
//   '\0Foo\0pri_var' =>
//   string(7) "foo_pri"
//   'bar' =>
//   class Bar#3 (2) {
//     public $pub_var =>
//     string(7) "bar_pub"
//     private $pri_var =>
//     string(7) "bar_pri"
//   }
// }


var_dump(json_decode(json_encode($foo), true));
// array(2) {
//   'pub_var' =>
//   string(7) "foo_pub"
//   'bar' =>
//   array(1) {
//     'pub_var' =>
//     string(7) "bar_pub"
//   }
// }