Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 访问SimpleXMLElement中的数值属性_Php_Simplexml - Fatal编程技术网

Php 访问SimpleXMLElement中的数值属性

Php 访问SimpleXMLElement中的数值属性,php,simplexml,Php,Simplexml,我试图访问下面元素中的数字,但从中获取值时遇到问题 echo $object->0; //returns Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '{' or '$' SimpleXMLElement Object ( [0:public] => 15810 ) 有什么办法可以让我得到这个价值吗 更新 我意识到这是一个奇怪的错误。。。我正在使

我试图访问下面元素中的数字,但从中获取值时遇到问题

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”在PHP中不是有效的标识符。因此,当您键入“0”时,它只会看到一个T_LNUMBER。所有名称都遵循变量命名约定。唯一的偏差是前面有->的成员变量不需要$prefix

{0}有效,因为{}指示标识符是内部简单表达式的结果。因此{$x}在本例中与$x相同,但{0}与“0”不同,因为它们产生不同的解析器标记。

。即使您能够以某种方式创建这样的元素,SimpleXML(很可能是大多数解析器)也无法读取结果文档

<!-- legal -->
<a0>foo</a0>

<!-- not legal -- note how even Stack Overflow's highlighter chokes on it -->
<0>foo</0>

福
福

我不知道名为“0”的节点的业务是什么,但您看到的错误是因为SimpleXML总是返回对象。如果必须将结果用作数字,请将其转换为适当的类型,例如

number_format((int) $ruleXml->HourlyUsage)

您可以使用
\uuuToString()
获取子对象的字符串值,因此它类似于
$object->\uuuToString()

你真的能用吗?我非常怀疑它会给出预期的结果;echo$object->$x;作品echo$object->{0};不起作用。@TOOTSKI是的,我可以(从master一直到5.0.0):重要的是如何构造类。从数组强制转换以错误的方式更改数字键(和错误)。而这个问题是关于带有数字键的对象,而不是铸造的数组…@ircmaxell你能描述或指出坏的和有缺陷的方式吗?谢谢。发布源XML的示例或链接。否则,这就类似于占卜。此外,切勿使用print_r()检查SimpleXMLElement。
<!-- legal -->
<a0>foo</a0>

<!-- not legal -- note how even Stack Overflow's highlighter chokes on it -->
<0>foo</0>
number_format((int) $ruleXml->HourlyUsage)