PHPでオブジェクトを連想配列に変換させるのは
$array = json_decode(json_encode($object), true);
こんなふうにjson_decode()
とjson_encode()
を駆使してたのですが、arrayでキャストする方法を(今更ながら)知りました。
で、ついでだからjson関数で変換する方法とarrayキャストする方法で速度比較を行ってみました。
cast.php
<?php
class hoge {
public $prop0 = 0;
public $prop1 = 'value1';
}
for ($i = 0; $i < 1000000; $i++) {
$object = new hoge();
$array = (array)$object;
$value = $array['prop0'];
}
json.php
<?php
class hoge {
public $prop0 = 0;
public $prop1 = 'value1';
}
for ($i = 0; $i < 1000000; $i++) {
$object = new hoge();
$array = json_decode(json_encode($object), true);
$value = $array['prop0'];
}
このようにhoge
クラスをnewしたあとにarrayでキャストするcast.php、json_decode()
とjson_encode()
で変換するjson.phpを用意して、timeコマンドで実行時間を計ってみました。以下結果。
$ time php cast.php
php cast.php 0.57s user 0.01s system 99% cpu 0.583 total
$ time php json.php
php json.php 2.72s user 0.02s system 99% cpu 2.740 total
当たり前ですけれど、関数を2つ使うjson.phpのほうが圧倒的に遅いですね。