同僚のJKの記事を読んで単純に興味が湧いた。
この2つのコードを比較した。
$array = [
'id' => 1,
'name' => 'sample',
'list' => [
'id' => 10,
'name' => 'test',
],
];
$obj = json_decode(json_encode($array));
$array = [
'id' => 1,
'name' => 'sample',
'list' => [
'id' => 10,
'name' => 'test',
],
];
function array_to_object($array) {
$obj = new stdClass;
foreach($array as $k => $v) {
if(strlen($k)) {
if(is_array($v)) {
$obj->{$k} = array_to_object($v); //RECURSION
} else {
$obj->{$k} = $v;
}
}
}
return $obj;
}
$obj = array_to_object($array);
root@0a3cc7d8d171:/opt/php# time for i in `seq 1000`;do php json.php;done
real 0m35.259s
user 0m14.850s
sys 0m5.630s
root@0a3cc7d8d171:/opt/php# time for i in `seq 1000`;do php rec.php;done
real 0m35.846s
user 0m15.320s
sys 0m5.860s
結論、誤差という感じだから内部的にほとんど同じようなことやってんだろうなって思ったよね。でも僕はなんか本来の用途と異なる使い方をするメソッドの利用は好きくないな。