2013-10-04 53 views
2

有誰知道我是否可以強制一個SimpleXMLElement變量始終是一個數組?PHP:simplexml_load_string()強制數組

<result> 
    <item> 
     <id>1</id> 
     <name>name 1</name> 
    </item> 
    <item> 
     <id>2</id> 
     <name>name 2</name> 
    </item> 
</result> 

當通過解析simplexml_load_string)以上的XML(我得到以下對象

SimpleXMLElement Object 
(
    [item] => Array 
    (
     [0] => SimpleXMLElement Object 
      (
       [id] => 1 
       [name] => name 1 
      ) 
     [1] => SimpleXMLElement Object 
      (
       [id] => 2 
       [name] => name 2 
      ) 
    ) 
) 

這是偉大的,因爲我可以通過「項目」循環,並得到各個對象。但是當item是一個單獨的條目,就像下面那樣,我得到了一個不同的對象結構,這會破壞我的循環,因爲我開始循環「id」和「name」而不是對象。

<result> 
    <item> 
     <id>1</id> 
     <name>name 1</name> 
    </item> 
</result> 

SimpleXMLElement Object 
(
    [item] => SimpleXMLElement Object 
    (
      [id] => 1 
      [name] => name 1  
    ) 

) 

有沒有辦法強制「item」是一個數組與simplexml_load_string()或通過重構XML?

回答

2

你不需要將它作爲一個數組,一個簡單的檢查就可以做到。像

if(is_array($xml->result->item)) 
{ 
    //loop here 
} 
else 
{ 
    //only one object 
} 

此外,一個foreach將完成工作是否有一個元素或有多個。例如,

<?php 
$string=" 
<result> 
    <item> 
     <id>1</id> 
     <name>name 1</name> 
    </item> 

</result>"; 

$xml = simplexml_load_string($string); 

//print_r($xml); 


foreach($xml->item as $item) 
{ 
echo $item->id."\n"; 
} 
?> 

這對多個項目也是完美的。見小提琴

Fiddle

+1

我有一些已有的代碼的該溶液,但它意味着我要麼設置單獨的「項目」到數組我或者我在重複的代碼,如果statment –

+0

見上面的編輯 –

+0

哇,不知道foreach會以單個對象的方式做出反應。我認爲foreach至少會給出一個警告,試圖循環一些不是數組的東西。感謝您的回答 –