PHPでオブジェクトを配列に変換するにはget_object_vars

いつも関数名が思い出せなくなるけど、どうやって検索したら見つかるかも毎回悩んでしまうので、自分用にメモ。get_object_varsですね。

# 「オブジェクトを配列にする」, “Object2Array”

昨日の、SimpleXMLElementをserializeしてもunserializeで元に戻せない件で、キャッシュでどうしてもserializeを使いたいことから、SimpleXMLElementの中のデータを配列に変換してしまうという方針にしました。

一つずつ取ってきて配列を再構築してもいいんですが、この手の処理はget_object_vars関数を使えばやってくれるので、その方が間違いが少ないと思います。

ただ、get_object_varsは再帰的に配列にしてくれるわけではありません。、SimpleXMLElementの要素の中にまた、SimpleXMLElementがあれば、それはそのまま残ってしまうため、今回の「serializeさせる」という目的ではこれだけでは不十分です。

PHPマニュアルのコメントにも、どうやってrecursiveに変換するか、というコード例がいろいろ出てきています。

今回は、SimpleXMLElementとget_object_varsで調べて出てきたIBM developerworks のPHP で XML をJSON に変換するを参考に、defineをconstに直すなど調整をしたものを使うことにしました。再帰の深さを制限できるようになってます。

PHP Hacksの目次を見ると53. 任意のオブジェクトを配列に変換する、とあるので、これ持ってる人はたぶんここに似たような話が載ってるんじゃないかな、とも思いました。