任何人都可以幫助解釋爲什麼以下情況會返回重複數據嗎?在SimpleXML對象上使用xPath對foreach循環返回重複數據
<?php
$xml_test = '<array key="results">
<array key="123">
<string key="mask">1234</string>
</array>
<array key="987">
<string key="mask">5678</string>
</array>
</array>';
$load_test = simplexml_load_string($xml_test);
foreach ($load_test as $array)
{
$mask = $array->xpath('//string[@key="mask"]');
print 'Mask: ' . $mask[0] . '<br />';
}
返回:
Mask: 1234
Mask: 1234
如果我foreach循環中拋出的print_r($陣列),我得到:
SimpleXMLElement Object
(
[@attributes] => Array
(
[key] => 123
)
[string] => 1234
)
Mask: 1234
SimpleXMLElement Object
(
[@attributes] => Array
(
[key] => 987
)
[string] => 5678
)
Mask: 1234
這到底是怎麼回事?爲什麼當我使用xPath表達式時,當兩個$數組顯然沒有保存重複數據時,我會得到重複的掩碼。
謝謝見,但我仍然感到困惑,其中重複的數據是從哪裏來的。每個循環中的$ array仍然包含整個XML結構?和print_r是隱藏它或什麼的? – 2012-03-11 05:05:08
我首先進行xpath查詢的問題是,我想要在每個數組節點上執行多個xpath查詢,以便不僅匹配掩碼,而且還匹配鍵:id,名稱和電子郵件。 – 2012-03-11 05:14:06
@MichaelP沒有重複的數據 - 只是因爲你的xpath查詢以'//開頭',每次你在循環中執行它時,你都會得到完全相同的返回的節點列表。所以每個循環迭代的值'$ mask [0]'是相同的。 – 2012-03-11 12:52:53