1. ホーム
  2. php

[解決済み] PHP オブジェクトを連想配列に変換する

2022-03-23 16:33:11

質問

私のコードは配列を使って書かれていますが、オブジェクトに格納されたデータで動作するAPIを私のウェブサイトに統合しています。

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

どのように解決するのですか?

タイプキャストするだけ

$array = (array) $yourObject;

から 配列 :

オブジェクトを配列に変換した場合、その結果はオブジェクトのプロパティを要素とする配列となります。キーはメンバ変数名ですが、いくつかの例外があります。整数のプロパティにはアクセスできません。プライベート変数にはクラス名が変数名の前に付加されます。これらのプリペンドされた値の両隣にはヌルバイトがある。

例 シンプルなオブジェクト

$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 );

出力(分かりやすく編集されています)。

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(
  )),
)

この方法で型付けすると、オブジェクトグラフのディープキャストが行われないため、publicでない属性にアクセスする場合はヌルバイトを適用する必要があります(マニュアルの引用で説明されているとおりです)。したがって、この方法はStdClassオブジェクトやパブリックプロパティのみを持つオブジェクトをキャストする際に最適です。クイック&ダーティな処理には適しています。

また、この詳細なブログ記事もご覧ください。