2011-08-19 17 views
1

假設我希望Place有一個電話號碼列表。 有些地方會有1個電話號碼,有些會有多個電話號碼。其他人根本就沒有。強制SimpleXML節點始終是一個數組,即使其中只有一個元素

的問題是這樣的:

$xml->addChild('phone_number','555.555.5555'); 

創建一個非可迭代PHONE_NUMBER文本節點:

$response->xml->phone_number; 

但這:

$xml->addChild('phone_number','555.555.5555'); 
$xml->addChild('phone_number','555.555.5556'); 

創建PHONE_NUMBER的一個可迭代數組:

$response->xml->phone_number[0]; 
$response->xml->phone_number[1]; 

這給客戶端帶來了不必要的負擔。他們必須檢測結果是否可迭代,並相應地修改其代碼。

如果我總是可以發回一個可重構的數組,即使其中有0個或1個項目,但是我一直無法找到關於如何執行此操作的任何文檔,那將會更好。在Perl中,我相信它被稱爲「forcearray」,但我還沒有找到PHP的等價物,這是我需要的。

回答

2

你應該考慮這個

<phone_numbers> 
    <phone_number>555.555.5555</phone_number> 
</phone_numbers> 

這是更靈活

旁邊的children()方法,你也可以考慮xpath
總是會生成一個數組是返回

例如

$xml = <<<XML 
<person> 
    <phone_numbers> 
    <phone_number>555.555.5555</phone_number> 
    </phone_numbers> 
</person> 
XML; 

$obj = simplexml_load_string($xml); 
$tels = $obj->xpath("//phone_numbers/*"); 

/* even more simple */ 
$tels = $obj->phone_numbers->children(); 
+0

我已經這樣做了,但我有同樣的問題。你會認爲結果是:$ response-> xml-> phone_numbers-> phone_number [0];但是當只有一個電話號碼時,結果實際上是:$ response-> xml-> phone_numbers-> phone_number; –

+0

方法xpath或孩子將允許返回一個數組 – ajreal

+0

@lo_fye - 對不起,可能不是您想要的答案,爲了使其成爲可循環的,預計會發生代碼更改 – ajreal

相關問題