我正在尝试访问下面元素中的数字,但是我无法从中获取值。
echo $object->0; //returns Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '{' or '$'
SimpleXMLElement Object (
[0:public] => 15810
)
关于如何获得这个价值的任何想法?
更新
我意识到这是一个奇怪的错误......我正在使用ebay API获取此值。即使我这样做:
$zero = 0;
$print_r($ruleXml->HourlyUsage->$zero);
它仍然显示相同的
SimpleXMLElement Object (
[0:public] => 15810
)
我也试过了{0}
这是我正在使用的输出....
[1] => SimpleXMLElement Object (
[CallName:public] => AddItem
[CountsTowardAggregate:public] => false
[DailyHardLimit:public] => 100000
[DailySoftLimit:public] => 100000
[DailyUsage:public] => 0
[HourlyHardLimit:public] => 100000
[HourlySoftLimit:public] => 100000
[HourlyUsage:public] => 0
[Period:public] => -1
[PeriodicHardLimit:public] => 0
[PeriodicSoftLimit:public] => 0
[PeriodicUsage:public] => 0
[ModTime:public] => 2010-05-04T18:06:08.000Z
[RuleCurrentStatus:public] => NotSet
[RuleStatus:public] => RuleOn
)
所以这就是......
number_format($ruleXml->HourlyUsage) //throws the error: number_format() expects parameter 1 to be double, object given
$ruleXml->HourlyUsage //shows the value on the page
答案 0 :(得分:6)
$x = 0;
echo $object->$x;
或
echo $object->{0};
原因是'0'不是PHP中的有效标识符。因此,当您键入“0”时,它看到的只是一个T_LNUMBER。所有名称都遵循可变命名约定。唯一的偏差是成员变量前面带有 - >不需要$前缀。 http://www.php.net/manual/en/language.variables.basics.php
{0}有效,因为{}表示标识符是里面简单表达式的结果。因此{$ x}与$ x相同,但{0}与'0'不同,因为它们会产生不同的解析器令牌。
答案 1 :(得分:1)
我不知道关于名为“0”的节点的业务是什么,但您看到的错误是因为SimpleXML总是返回对象。如果必须将结果用作数字,请将其强制转换为适当的类型,例如
number_format((int) $ruleXml->HourlyUsage)
答案 2 :(得分:0)
XML elements cannot begin with a digit。即使你可以以某种方式创建这样的元素,SimpleXML(很可能,大多数解析器)将无法读取结果文档。
<!-- legal -->
<a0>foo</a0>
<!-- not legal -- note how even Stack Overflow's highlighter chokes on it -->
<0>foo</0>
答案 3 :(得分:0)
您可以使用__toString()
获取子对象的字符串值,因此它就像$object->__toString();