多層配列とオブジェクトの変換の目的は非常に単純なので、WebService で多層配列とオブジェクトの変換を処理するのに便利です
シンプル (配列) と (オブジェクト) は単一レベルのデータのみを処理できますが、マルチレベルの配列とオブジェクトの変換については何もできません。
オブジェクトは json_decode(json_encode($object) によって一度に配列に変換できますが、オブジェクト内で gbk 中国語などの utf-8 でエンコードされていない非 ASCII 文字に遭遇すると、パフォーマンスはもちろんの問題が発生します。 json_encode と decode も疑わしいです。
以下のコード:
<?php function objectToArray($d) { if (is_object($d)) { // Gets the properties of the given object // with get_object_vars function $d = get_object_vars($d); } if (is_array($d)) { /* * Return array converted to object * Using __FUNCTION__ (Magic constant) * for recursive call */ return array_map(__FUNCTION__, $d); } else { // Return array return $d; } } function arrayToObject($d) { if (is_array($d)) { /* * Return array converted to object * Using __FUNCTION__ (Magic constant) * for recursive call */ return (object) array_map(__FUNCTION__, $d); } else { // Return object return $d; } } // Useage: // Create new stdClass Object $init = new stdClass; // Add some test data $init->foo = "Test data"; $init->bar = new stdClass; $init->bar->baaz = "Testing"; $init->bar->fooz = new stdClass; $init->bar->fooz->baz = "Testing again"; $init->foox = "Just test"; // Convert array to object and then object back to array $array = objectToArray($init); $object = arrayToObject($array); // Print objects and array print_r($init); echo "\n"; print_r($array); echo "\n"; print_r($object); ?>