2011-07-30 51 views
0

我想通過mutidimentional遞歸對象/數組結構來創建json,但以下工作不正常。$ data被重置,但我不知道如何防止這種情況。php拒絕卡住

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'不復位。它會生成一個包含嵌套數組的所有值的字符串。我在幾個陣列上測試過它。 –

+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}}