2009-10-06 95 views
0

如果格式如下,其中c是一個對象數組,我必須通過每一次迭代的foreach:如何在使用SimpleXML時獲取對象名稱?

$a->b->c 

而且我做的:

$z = $a->b 
foreach($z as $key => $value) 
echo $value['field']; 

$鍵出現爲空,即使我有有效的價值。我如何獲取對象的名稱?

回答

2

考慮下面這段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

如果對象被轉換成一個陣列, 結果是一個數組,其元素 是對象的屬性。
密鑰 是成員變量名稱, 幾個值得注意的例外:整數 屬性無法訪問;私有 變量具有名稱前綴 的變量名稱; 受保護的變量在變量名前加'*' 。

+0

這是使用ArrayAccess的對象。我不確定您的解決方案是否適用於此解決方案。胡; – Citizen 2009-10-06 20:15:26

+0

胡;你的意思是它與SimpleXML無關? (在你的問題的標題中有「simplexml」,所以我可能會採取相當快捷的方式^^ – 2009-10-06 20:19:03

+0

它使用的是simpleXML,該對象是一個實現ArrayAccess接口的對象,並且你的回答實際上是正確的:) 添加(數組)到我的foreach的前面導致我的$鍵得到正確的值,而不是返回NULL值。 – Citizen 2009-10-06 20:20:52

6

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

+0

這也適用,但他的回答是第一個:) – Citizen 2009-10-06 20:21:51

+0

這是一個更優雅的基於OO的解決方案,它利用SimpleXML更好。 – 2009-10-06 20:35:18