2011-07-30 9 views
0

jsonを作成するためにmutidimentionalオブジェクト/配列構造を再帰しようとしていますが、以下のコードは動作しません。$ dataはリセットされますが、これを防ぐ方法はわかりません。PHP recusion stuck

public function encodeJSON($data) 
    { 

     foreach ($data as $key => $value) 
     {  
     if(is_array($value)|| is_object($value)) 
      { 
       $json->$key = $this->encodeJSON($value);    
      } 
     else 
      { 
       $json->$key = $value; 
      }           
     } 
    return json_encode($json); 
} 
+0

あなたの思考プロセスは少しオフので、これは実際には有効なJSONを作成しませんされている間、それは再帰を行い、そして '$のdata'がリセットされません。このコードでテスト

。ネストされた配列を含むすべての値を含む1つの文字列を生成します。私はいくつかの配列でそれをテストしました。 –

+0

注釈:個別に値をエンコードすると、正しくないJSONが生成されます。意図した '{" foo ":{" bar ":" baz "}の代わりに' {"foo": "{\" bar \ ":\" baz \ "}"} } '。オブジェクト/配列全体を一度にエンコードする必要があります。 – deceze

+3

@ダン - そうです。私はmike628がここで何をしようとしているのかよく分かりません。 Mike - 'json_encode($ data);の戻り値に何が問題なのですか? json_encode()は配列とオブジェクトを完全に直列化できます! – timdev

答えて

2

あなたは一つのことだが、それは余分な機能を書くために本当に必要はありませんので、少なくとも私にとっては、自動的に再帰的にオブジェクトと配列をコード化するjson_encode再帰を学ぼうとしている場合。

class TestClass { 
    var $c1; 
    var $c2; 

    function __construct() { 
     $this->c1 = 'member variable 1'; 
     $this->c2 = 8080; 
    } 
} 

$test = array('hello' => 'world', 'age' => 30, 
    'arr' => array('a' => 'b', 'c' => 'd'), 'obj' => new TestClass()); 

echo(json_encode($test)); 
// I get the following JSON object: 
// {"hello":"world","age":30,"arr":{"a":"b","c":"d"},"obj":{"c1":"member variable 1","c2":8080}}