2011-07-04 83 views
0

我確信之前會有這樣的事情發生,但我一直在努力尋找我在這裏找到的東西。我已經閱讀過很多次以前的答案,但以前從未問過或回答過我自己!SimpleXML讀鍵/值對

我正在使用SimpleXML來讀取對Amazon SimpleDB查詢的響應,並且結果在表單中;

<Item> 
    <Name>Item 1</Name> 
    <Attribute> 
     <Name>Title</Name> 
     <Value>Item 1 Title</Value> 
    </Attribute> 
    <Attribute> 
     <Name>URL</Name> 
     <Value>Item 1 URL</Value> 
    </Attribute> 
    <Attribute> 
     <Name>Description</Name> 
     <Value>Item 1 Description</Value> 
    </Attribute> 
    <Attribute> 
     <Name>Site</Name> 
     <Value>Item 1 Site</Value> 
    </Attribute> 
</Item> 
<Item> 
    <Name>Item 2</Name> 
    <Attribute> 
     <Name>Title</Name> 
     <Value>Item 2 Title</Value> 
    </Attribute> 
    <Attribute> 
     <Name>URL</Name> 
     <Value>Item 2 URL</Value> 
    </Attribute> 
    <Attribute> 
     <Name>Description</Name> 
     <Value>Item 2 Description</Value> 
    </Attribute> 
    <Attribute> 
     <Name>Site</Name> 
     <Value>Item 2 Site</Value> 
    </Attribute> 
</Item> 

我有沒有問題,在項目的頂部讀「名稱」,使用PHP的foreach()可以列出所有的人,我已經成功地做同樣的創建列表'鍵/值'成對地循環上市。

我真的不知道如何選擇,例如,一個特定的描述值,把它放在我想要在一個頁面中的位置。

選擇Item-> Attribute給出表單中的一個數組;

[Name] -> Title 
[Value] -> Item 1 Title 

而這就是我有點卡住了。仍然在我現有的foreach()循環中,我想要一個'Attributes'數組,所以我可以選擇,例如;

[Title] -> Item 1 Title 
[URL] -> Item 1 URL 

等等。

我很好的選擇項目和迴應他們的名字,這是真的盡我所能。由於這是一個新手問題,我確定之前已經提出過這個問題,我在其他地方看不到答案,所以如果任何人都能指出我的答案,我會非常感激!

由於提前

回答

1

在你的foreach循環,創建一個新的foreach循環來創建屬性數組。

<?php 

foreach($items as $item) 
{ 
    $attributes = array(); 

    foreach($item->Attribute as $attribute) 
    { 
     $attributes[$attribute->Name] = $attribute->Value; 
    } 

    echo 'Item name:'.$item->Name.'<br />'; 
    echo 'Item attribute URL:'.$attributes['URL'].'<br />'; 
    echo 'Item attribute Description:'.$attributes['Description'].'<br />'; 
} 

?> 

注:沒有測試,根據需要進行調整

+0

這是完美的,謝謝!我沒有完全意識到你可以從這樣的現有變量中設置數組!再次感謝! –

0

我想這在不久前Twitter的集成到一個站點。

我在搜索XML2ARRAY時發現了一段代碼。正如您可能猜到的那樣,這將XML數據轉換爲多維數組,如果您知道元素標題,則可以使用FOREACH或剛纔命名的數組調用的流式加載。

然後,您可以檢查它是否每次遇到名爲ATTRIBUTE的元素時,都會將該數據保存到使用NAME作爲鍵和VALUE作爲值的新數組,然後僅在完成時取消設置ATTRIBUTE (用於更好的內存處理)並在新數組值中設置一個新的鍵。

希望幫助

+0

我沒有嘗試這樣做,其他的解決方案工作,似乎簡單,但非常感謝你的幫助! –