2016-10-28 39 views
3

我讀了一些代碼,看到下面的線

$obj = json_decode(json_encode($xml)); 

$xmlsimplexml_load_string所以對我來說,它看起來像該行是等價的

$obj = $xml; 

可能是什麼原因看似不必要的編碼和解碼?

+0

如果「json_decode」的第二個參數被傳遞爲true,這是一種將SimpleXMLElement轉換爲PHP數組的恰到好處的方式。就目前而言,這將它變成stdClass,這或多或少都是毫無意義的。 – iainn

+2

實際上,爲了返回一個關聯數組而不是stdClass對象,它需要將json_decode的第二個參數設置爲true。除此之外,@iainn是對的。 –

+0

「看起來像這條線相當於'$ obj = $ xml;'」 - 如果你只是運行代碼,你會看到是不正確的;-) –

回答

4

如果$xmlSimpleXml對象,則無法直接訪問其某些屬性。它是用來SimpleXml對象轉換爲古典的對象,並可以訪問其所有屬性:)

另外的一招,你可以傳遞一個布爾參數,以獲得一個數組,而不是一個對象:json_decode(json_encode($xml), true);

+0

在什麼情況下SimpleXML不能訪問某些屬性? – iainn

+0

使用SimpleXml你需要使用類的方法,如$ xml-> getChildrens()等,這只是一個避免花費時間來搜索正確函數的技巧,它更容易像古典對象一樣使用它$ xml-> myattributes 請參閱文檔http://php.net/manual/fr/book.simplexml.php – Fky