PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPでオブジェクトを連想配列に変換する方法【json_encodeと型キャストの2つの手法】

PHPで開発をしていると、オブジェクトのプロパティを連想配列として扱いたい場面がよくあります。例えば、APIレスポンスの整形やデータの汎用的な処理を行う際などです。この記事では、PHPでオブジェクトを連想配列に変換する代表的な2つの方法を、サンプルコードと実行結果付きでわかりやすく解説します。

方法1:json_encode() と json_decode() を使う方法

最もシンプルで広く使われているのが、json_encode() でオブジェクトをJSON文字列に変換し、json_decode() の第2引数に true を渡して連想配列に戻す方法です。

サンプルコード

<?php
    class department {
        public function __construct($deptname, $deptzone) {
            $this->deptname = $deptname;
            $this->deptzone = $deptzone;
        }
    }
    $myObj = new department("Marketing", "South");
    echo "Before conversion:"."\n";
    var_dump($myObj);
    $myArray = json_decode(json_encode($myObj), true);
    echo "After conversion:"."\n";
    var_dump($myArray);
?>

実行結果

Before conversion:
object(department)#1 (2) {
    ["deptname"]=>
    string(9) "Marketing"
    ["deptzone"]=>
    string(5) "South"
}
After conversion:
array(2) {
    ["deptname"]=>
    string(9) "Marketing"
    ["deptzone"]=>
    string(5) "South"
}

var_dump() の出力を見ると、変換前は object(department) 型でしたが、変換後はキーと値のペアを持つ array(連想配列)になっていることが確認できます。プロパティ名がそのまま配列のキーに対応しています。

方法2:(array) 型キャストを使う方法

もうひとつの方法は、オブジェクトを (array) で明示的にキャストする手法です。こちらはJSONへのエンコード・デコードを経由しないため、処理が高速というメリットがあります。

サンプルコード

<?php
    class department {
        public function __construct($deptname, $deptzone) {
            $this->deptname = $deptname;
            $this->deptzone = $deptzone;
        }
    }
    $myObj = new department("Marketing", "South");
    echo "Before conversion:"."\n";
    var_dump($myObj);
    $arr = (array)$myObj;
    echo "After conversion:"."\n";
    var_dump($arr);
?>

実行結果

Before conversion:
object(department)#1 (2) {
    ["deptname"]=>
    string(9) "Marketing"
    ["deptzone"]=>
    string(5) "South"
}
After conversion:
array(2) {
    ["deptname"]=>
    string(9) "Marketing"
    ["deptzone"]=>
    string(5) "South"
}

この場合も、public プロパティであれば同じように連想配列へ変換されます。

2つの方法の違いと注意点

どちらの方法も public プロパティなら問題なく動作しますが、以下の点に注意が必要です。

  • private / protected プロパティの扱い: 型キャスト (array) を使うと、private や protected のプロパティには \0*\0\0クラス名\0 といったヌルバイトを含む特殊なキーが付きます。一方、json_encode() では private / protected プロパティがそもそも出力対象外になるため、変換結果から消えてしまいます。
  • ネストしたオブジェクト: json_decode(json_encode($obj), true) の方法は、入れ子になったオブジェクトもすべて再帰的に連想配列へ変換してくれます。型キャストの場合はトップレベルのみの変換となるため、深い構造が必要ならJSON方式が便利です。
  • パフォーマンス: 単純な変換であれば型キャストの方が高速です。大量のデータを処理する場合はキャストを検討するとよいでしょう。

まとめ

PHPでオブジェクトを連想配列に変換する主な方法は次の2つです。

  • $arr = json_decode(json_encode($obj), true); — ネスト構造ごと再帰的に変換でき、private/protected は除外される
  • $arr = (array)$obj; — 高速だが、private/protected のキーにヌルバイトが付く点に注意

用途やオブジェクトの可視性に応じて、適切な方法を選択してください。

  1. PHPでオブジェクトを連想配列に変換する2つの方法を徹底解説

    PHPアプリケーションでは、文字列、配列、オブジェクトなど、さまざまな形式のデータを扱います。実際の開発現場では、APIレスポンスやデータベースの結果など、PHPオブジェクトとして取得したデータを、連想配列の形式に変換して処理したい場面がよくあります。この記事では、PHPでオブジェクトを連想配列に変換する方法を、具体的なコード例とともにわかりやすく解説します。オブジェクトと連想配列とはまず、それぞれの基本概念をおさらいしましょう。オブジェクトとは、クラスから生成されるインスタンスのことです。1つのクラス定義から複数のオブジェクトを作成でき、各オブジェクトには個別のメモリが割り当てられます。クラ

  2. PHPのarray()関数とは?配列の作成方法をわかりやすく解説

    PHPのarray()関数は、配列を作成するための関数です。PHPにおける配列には、主に以下の3種類が存在します。インデックス配列 − 数値インデックス(0から始まる番号)で要素を管理する配列連想配列 − 文字列などの名前付きキーで要素を管理する配列多次元配列 − 配列の中に1つ以上の配列を含む、入れ子構造の配列構文// 数値インデックスを持つ配列(インデックス配列) array(value1, value2, ...); // 名前付きキーを持つ配列(連想配列) array(key1 => value1, key2 => value2, ...)パラメータvalue − 配列に