PHPオブジェクトを連想配列に変換する 質問する

PHPオブジェクトを連想配列に変換する 質問する

コードは配列を使用して記述されていますが、オブジェクトに格納されたデータで動作する API を Web サイトに統合しています。

オブジェクトを配列に変換する簡単な関数が欲しいです。

ベストアンサー1

ただ型にはめるだけ

$array = (array) $yourObject;

から配列:

オブジェクトが配列に変換されると、その結果は、オブジェクトのプロパティを要素とする配列になります。キーはメンバー変数名ですが、いくつかの注目すべき例外があります。整数プロパティにはアクセスできません。プライベート変数には、変数名の前にクラス名が付加されます。保護された変数には、変数名の前に '*' が付加されます。これらの付加された値には、両側に null バイトがあります。

例: 単純なオブジェクト

$object = new StdClass;
$object->foo = 1;
$object->bar = 2;

var_dump( (array) $object );

出力:

array(2) {
  'foo' => int(1)
  'bar' => int(2)
}

例: 複合オブジェクト

class Foo
{
    private $foo;
    protected $bar;
    public $baz;

    public function __construct()
    {
        $this->foo = 1;
        $this->bar = 2;
        $this->baz = new StdClass;
    }
}

var_dump( (array) new Foo );

出力(わかりやすくするために \0 を編集しています):

array(3) {
  '\0Foo\0foo' => int(1)
  '\0*\0bar' => int(2)
  'baz' => class stdClass#2 (0) {}
}

var_exportの代わりに次のように出力しますvar_dump:

array (
  '' . "\0" . 'Foo' . "\0" . 'foo' => 1,
  '' . "\0" . '*' . "\0" . 'bar' => 2,
  'baz' =>
  stdClass::__set_state(array(
  )),
)

PHP組み込みクラスについてさらに詳しく知るにはstdclassこのドキュメントを読む

この方法で型キャストすると、オブジェクト グラフのディープ キャストは実行されず、非パブリック属性にアクセスするには null バイト (マニュアルの引用で説明されているとおり) を適用する必要があります。したがって、これは StdClass オブジェクトまたはパブリック プロパティのみを持つオブジェクトをキャストする場合に最適です。手っ取り早く (要求どおり) 行うにはこれで十分です。

こちらの詳細なブログ投稿もご覧ください:

おすすめ記事