我觉得我失去了一些东西真的很明显这里,但为什么我得到的输出我,而不是输出我希望在以下变种可有人向我解释转储:检测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