PHPのオブジェクトを配列に変換/出力する方法

シェアする

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

PHPで変数の中身がオブジェクトであった場合、配列に変換するには2通りの方法があります。

  1. “(array)”を付けて代入しなおす(キャストする)方法
  2. “get_object_vars”関数を使う方法

※多次元配列のオブジェクトの場合、1階層までしか変換しないので、foreachなどで処理する必要があります。

※もし、JSON形式のデータを取得して”json_decode”関数で変換する場合は、第二引数をTRUEにすると戻り値は、オブジェクトではなく配列になります。

<?php
//単純なオブジェクト→配列変換 その1
$aArray1 = (array) $oObject; /* $oObjectはオブジェクトとします */
//単純なオブジェクト→配列変換 その2
$aArray1 = get_object_vars($oObject); /* $oObjectはオブジェクトとします */
//オブジェクト出力時に配列へ変換
$sResult = @file_get_contents( "http://url.to.simple.xml.file/" );
$aArray2 = (array) simplexml_load_string( $sResult );
?>
※オブジェクトのメンバー変数にprivate,protectedが使われている場合注意点があります。下記「注意点」参照。

■所感

WEBサービスなどのAPIを使う際に、レスポンス(結果)のフォーマットがXML形式やJSON形式で返ってくる場合、PHP5の場合だとsimpleXML関数やjson_decode関数などを使う事があると思います。

どちらの関数もオブジェクトで結果を返してくるのですが、プログラムによっては結果のデータが配列の方が便利な場合があります。

json_decode関数であれば、第二引数をTRUEにすると配列で返してくれるのですが、simpleXMLのように、そうでない関数もあります。

オブジェクトもforeachで処理できるし、クラスを利用しているならオブジェクトの方が便利なのですが、何かと配列の方が都合がいい場合に。

ただ、APIの相手方のWEBサービスがPHPのデータをSERIALIZEして出力してくれれば、こちら(利用側)もUNSERIALIZEで使えるので、自前の環境ならそちらの方がいいかも。

■参考:PHP: 配列 – Manual

注意点

オブジェクト内のデータ(メンバー変数)がpublic意外のprivate, protectedが使われている場合、配列の添字となるメンバー変数名の前にオブジェクト名や”*”記号が付きます。問題は、その際の添字にnullバイト(\0)が付くので、ブラウザによっては表示されないため注意が必要です。

シンプルなクラス、オブジェクトデータの利用のみと考えていいでしょう。

■参考資料:スカラー値を配列にキャストする【PHP】 – Programming Magic


スポンサーリンク
レクタングル(大)広告
レクタングル(大)広告

シェアする

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存