PHPでオブジェクトを連想配列に変換する2つの方法を徹底解説
PHPアプリケーションでは、文字列、配列、オブジェクトなど、さまざまな形式のデータを扱います。実際の開発現場では、APIレスポンスやデータベースの結果など、PHPオブジェクトとして取得したデータを、連想配列の形式に変換して処理したい場面がよくあります。
この記事では、PHPでオブジェクトを連想配列に変換する方法を、具体的なコード例とともにわかりやすく解説します。
オブジェクトと連想配列とは
まず、それぞれの基本概念をおさらいしましょう。
オブジェクトとは、クラスから生成されるインスタンスのことです。1つのクラス定義から複数のオブジェクトを作成でき、各オブジェクトには個別のメモリが割り当てられます。クラスの設計図に対して、オブジェクトはその実体というイメージです。
一方、連想配列とは、文字列などをキー(インデックス)として持つ配列のことです。「キー」と「値」のペアでデータを管理し、各値は対応するキーと紐づけられています。数値インデックスの通常の配列と違い、意味のある名前でデータにアクセスできるのが特徴です。
それでは、オブジェクトを配列に変換する具体的な方法を見ていきましょう。
方法1:json_encode() と json_decode() を使う方法
最初の方法は、JSON関数を経由するテクニックです。json_encode() 関数は指定した値をJSONエンコードされた文字列に変換し、続けて json_decode() 関数に第2引数として true を渡すことで、そのJSON文字列をPHPの連想配列へと変換できます。
サンプルコード
<?php
class student {
public function __construct($firstname, $lastname) {
$this->firstname = $firstname;
$this->lastname = $lastname;
}
}
$myObj = new student("Alex", "Stokes");
echo "Before conversion:".'</br>';
var_dump($myObj);
$myArray = json_decode(json_encode($myObj), true);
echo "After conversion:".'</br>';
var_dump($myArray);
?>実行結果
Before conversion:
object(student)#1 (2) { ["firstname"]=> string(4) "Alex" ["lastname"]=> string(6) "Stokes" }
After conversion:
array(2) { ["firstname"]=> string(4) "Alex" ["lastname"]=> string(6) "Stokes" }コードの解説
ここでは student クラスを定義し、その中に __construct() コンストラクタを宣言しています。コンストラクタはオブジェクトが生成されるときに自動的に実行され、new キーワードでオブジェクトを作成する際に渡された引数を受け取ります。
最初の var_dump() ではオブジェクトの中身をそのまま出力しています。次に、json_encode() でオブジェクトをJSON文字列に変換し、json_decode() の第2引数に true を指定することで連想配列に戻しています。この一連の処理により、オブジェクトのプロパティがキーと値のペアとして配列に格納されます。
なお、この方法はネストされたオブジェクト(入れ子構造)も再帰的に配列へ変換できるのが利点です。ただし、private や protected プロパティの扱いや、特殊な文字コードへの注意も必要です。
方法2:型キャスト(typecasting)を使う方法
2つ目の方法は、型キャストによる変換です。型キャストとは、あるデータ型の変数を別のデータ型として扱うように明示的に変換する手法で、オブジェクトの前に (array) を付けるだけで簡単に配列へ変換できます。
サンプルコード
<?php
class bag {
public function __construct( $item1, $item2, $item3){
$this->item1 = $item1;
$this->item2 =$item2;
$this->item3 = $item3;
}
}
$myBag = new bag("Books", "Ball", "Pens");
echo "Before conversion :".'</br>';
var_dump($myBag);
$myBagArray = (array)$myBag;
echo "After conversion :".'</br>';
var_dump($myBagArray);
?>実行結果
Before conversion :
object(bag)#1 (3) { ["item1"]=> string(5) "Books" ["item2"]=> string(4) "Ball" ["item3"]=> string(4) "Pens" }
After conversion:
array(3) { ["item1"]=> string(5) "Books" ["item2"]=> string(4) "Ball" ["item3"]=> string(4) "Pens" }コードの解説
ここでは bag クラスを定義し、コンストラクタ __construct() 内で3つのプロパティに値を代入しています。new キーワードでオブジェクトを生成すると、コンストラクタに渡された引数が各プロパティにセットされます。
最初の var_dump() ではオブジェクトをそのまま出力し、次に (array)$myBag という型キャストによってオブジェクトを配列へ変換しています。結果を見ると、オブジェクトのプロパティ名がそのまま配列のキーになり、値が保持されていることが確認できます。
まとめ:どちらの方法を選ぶべきか
PHPでオブジェクトを連想配列に変換する主な方法は以下の2つです。
- json_encode() / json_decode() を使う方法: ネストされたオブジェクトも含めて再帰的に変換したい場合に便利です。
- (array) 型キャストを使う方法: シンプルで高速ですが、public プロパティのみがそのまま変換対象となり、protected や private プロパティには特殊なキー名が付く点に注意が必要です。
用途やオブジェクトの構造に応じて、最適な方法を選択してください。どちらのテクニックも実務で頻繁に活用される基本的な操作なので、ぜひマスターしておきましょう。
-
PHPのarray()関数とは?配列の作成方法をわかりやすく解説
PHPのarray()関数は、配列を作成するための関数です。PHPにおける配列には、主に以下の3種類が存在します。インデックス配列 − 数値インデックス(0から始まる番号)で要素を管理する配列連想配列 − 文字列などの名前付きキーで要素を管理する配列多次元配列 − 配列の中に1つ以上の配列を含む、入れ子構造の配列構文// 数値インデックスを持つ配列(インデックス配列) array(value1, value2, ...); // 名前付きキーを持つ配列(連想配列) array(key1 => value1, key2 => value2, ...)パラメータvalue − 配列に
-
C#でバイト配列をストリームに変換する方法|MemoryStreamの使い方を解説
C#におけるStream(ストリーム)は、すべてのストリームクラスの抽象基底クラスであり、バイト列に対する汎用的なビューを提供します。ストリームオブジェクトは、「読み込み(Reading)」「書き込み(Writing)」「シーク(Seeking)」という3つの基本操作をサポートしており、必要に応じて位置をリセットできるため、パフォーマンスの向上にもつながります。バイト配列からMemoryStreamへの変換バイト配列(byte配列)は、MemoryStreamクラスを使うことで簡単にメモリストリームへ変換できます。コンストラクタにバイト配列を渡すだけで、その内容を保持するストリームが生成されま