如果格式如下,其中c是一個對象數組,我必須通過每一次迭代的foreach:如何在使用SimpleXML時獲取對象名稱?
$a->b->c
而且我做的:
$z = $a->b
foreach($z as $key => $value)
echo $value['field'];
$鍵出現爲空,即使我有有效的價值。我如何獲取對象的名稱?
如果格式如下,其中c是一個對象數組,我必須通過每一次迭代的foreach:如何在使用SimpleXML時獲取對象名稱?
$a->b->c
而且我做的:
$z = $a->b
foreach($z as $key => $value)
echo $value['field'];
$鍵出現爲空,即使我有有效的價值。我如何獲取對象的名稱?
考慮下面這段XML和代碼的SimpleXML加載它:
$str = <<<XML
<root>
<a>
<b>
<c>glop</c>
<d>test</d>
</b>
</a>
</root>
XML;
$xml = simplexml_load_string($str);
你可以「投」 $xml->a->b
到陣列,能夠遍歷它:
foreach ((array)$xml->a->b as $name => $value) {
echo "$name : $value<br />";
}
,你會得到這樣的輸出:
c : glop
d : test
(也許與您的XML字符串不完全相同,但我希望這可以幫助您找到解決方案 - 如果確實如此,您是否可以編輯問題以向我們顯示XML數據以及您願意獲得的輸出結果? )
引述手冊頁,在Converting to array section:
如果對象被轉換成一個陣列, 結果是一個數組,其元素 是對象的屬性。
密鑰 是成員變量名稱, 幾個值得注意的例外:整數 屬性無法訪問;私有 變量具有名稱前綴 的變量名稱; 受保護的變量在變量名前加'*' 。
XML:
<a>
<b>
<c />
<d />
<e />
</b>
</a>
PHP代碼:
$xml = new SimpleXMLElement($file_url, true);
foreach($xml->b->children() as $node) {
echo $node->getName() . "\n";
}
會給你:
c
d
b
進一步參考見PHP's manual。
這也適用,但他的回答是第一個:) – Citizen 2009-10-06 20:21:51
這是一個更優雅的基於OO的解決方案,它利用SimpleXML更好。 – 2009-10-06 20:35:18
這是使用ArrayAccess的對象。我不確定您的解決方案是否適用於此解決方案。胡; – Citizen 2009-10-06 20:15:26
胡;你的意思是它與SimpleXML無關? (在你的問題的標題中有「simplexml」,所以我可能會採取相當快捷的方式^^ – 2009-10-06 20:19:03
它使用的是simpleXML,該對象是一個實現ArrayAccess接口的對象,並且你的回答實際上是正確的:) 添加(數組)到我的foreach的前面導致我的$鍵得到正確的值,而不是返回NULL值。 – Citizen 2009-10-06 20:20:52