我覺得我失去了一些東西真的很明顯這裏,但爲什麼我得到的輸出我,而不是輸出我希望在以下變種可有人向我解釋轉儲:檢測SimpleXML的數組屬性
這裏的原始的XML:
<result>
<category>
<id>3</id>
<name>Category 1</name>
<subcategory>
<id>9</id>
<name>SubCat 1</name>
</subcategory>
<subcategory>
<id>10</id>
<name>SubCat 2</name>
</subcategory>
<subcategory>
<id>11</id>
<name>SubCat 3</name>
</subcategory>
</category>
</result>
我在做什麼:
$xml = new SimpleXMLElement($file);
foreach($xml->category as $node)
{
echo "dump 1:
";
var_dump($node);
echo "**********************************************
dump 2:
";
var_dump($node->subcategory);
die();
}
此輸出:
dump 1:
object(SimpleXMLElement)#130 (3) {
["id"]=>
string(1) "3"
["name"]=>
string(10) "Category 1"
["subcategory"]=>
array(3) {
[0]=>
object(SimpleXMLElement)#133 (2) {
["id"]=>
string(1) "9"
["name"]=>
string(8) "SubCat 1"
}
[1]=>
object(SimpleXMLElement)#135 (2) {
["id"]=>
string(2) "10"
["name"]=>
string(8) "SubCat 2"
}
[2]=>
object(SimpleXMLElement)#136 (2) {
["id"]=>
string(2) "11"
["name"]=>
string(8) "SubCat 3"
}
}
}
**********************************************
dump 2:
object(SimpleXMLElement)#138 (2) {
["id"]=>
string(1) "9"
["name"]=>
string(8) "SubCat 1"
}
第一個變種轉儲輸出,我期望什麼,但我希望第二的var_dump輸出是:
array(3) {
[0]=>
object(SimpleXMLElement)#133 (2) {
["id"]=>
string(1) "9"
["name"]=>
string(8) "SubCat 1"
}
[1]=>
object(SimpleXMLElement)#135 (2) {
["id"]=>
string(2) "10"
["name"]=>
string(8) "SubCat 2"
}
[2]=>
object(SimpleXMLElement)#136 (2) {
["id"]=>
string(2) "11"
["name"]=>
string(8) "SubCat 3"
}
}
甚至包含所有數組項的對象。爲什麼不是這種情況?
我可以看到,當我打電話給var_dump($node->subcategory)
時,它傾倒了它找到的第一個「子類別」節點,但是爲什麼它會將所有'子類別'節點都轉換爲第一個var轉儲的數組而不是第二個?我怎麼會模仿這種行爲來檢測'子類別'是否包含多個對象(就像它在第一個變量轉儲中那樣)?
基本上我試圖做的是檢測是否爲SimpleXMLElement的屬性包含多個值的數組(即如果它包含的子節點)
我已經試過各種,但我不能似乎檢測到simpleXml對象的其中一個屬性是否包含一組數組。
更新:
我發現這工作:
if(count($node->subcategory)>1)
{
// we have more than one subcategory
}
但它不是最優雅的方式,我敢肯定,必須有一個更清潔的方法是什麼?
這個問題的答案後可能幫助你:http://stackoverflow.com/questions/2751711/php-get-values-from-simplexmlelement-array?rq = 1 ** var_dump($ node [「subcategoy」]); ** – feskr
@feskr謝謝,我通過在我的實際代碼中的foreach循環推送所有屬性(因此屬性),它似乎並不區分屬性和屬性,這是一個問題! – Stu
@feskr var_dump($ node [「subcategory」])'outputs:'NULL' – Stu