PHPでオブジェクトを配列に変換
ググると色々出てきたものの、「オブジェクトの中に配列があって、さらにその中にオブジェクトがあって、さらにその中に配列がある」のような場合に正しく変換できなかったり、privateな値もまとめて取得したい場合に対応できなかったり…ばかりだったので書いてみた。
privateな値に直接アクセスできるようにするのは邪道な気もするけど、どうしても必要な時があったりなかったり。
function object2array($data)
{
if (is_object($data)) {
$data = (array)$data;
}
if (is_array($data)) {
foreach ($data as $key => $value) {
$key1 = (string)$key;
$key2 = preg_replace('/\W/', ':', $key1);
if (is_object($value) or is_array($value)) {
$data[$key2] = object2array($value);
} else {
$data[$key2] = (string)$value;
}
if ($key1 != $key2) {
unset($data[$key1]);
}
}
}
return $data;
}
使う時は
$array = object2array($object);
のように呼び出します。まだまだ調整の余地がありそうですが、ひとまずこれで。