Bir SimpleXMLElement sayısal bir özellik erişme

3 Cevap php

Ben aşağıda öğesi sayısını erişmeye çalışıyorum, ama ben bunun dışında değerini alma sorun yaşıyorum.

echo $object->0; //returns Parse error: syntax error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '{' or '$'

SimpleXMLElement Object ( 
    [0:public] => 15810
)

Ben bu değeri nasıl alabilirim herhangi bir fikir?

Update

Ben bu garip bir hata olduğunu fark ... Ben bu değeri almak için ebay API kullanıyorum. Yapmam bile:

  $zero = 0;
  $print_r($ruleXml->HourlyUsage->$zero);

Yine aynı gösterir

SimpleXMLElement Object ( 
    [0:public] => 15810
)

I {0} de çalıştı

İşte ben çalışıyorum ne çıktı bulunuyor ....

[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
    )

Yani burada bir şey ...

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

3 Cevap

$x = 0;
echo $object->$x;

veya

echo $object->{0};

Nedeni, '0 'PHP geçerli bir tanımlayıcı değil olmasıdır. Eğer '0 'yazdığınızda Yani, gördüğü bütün bir T_LNUMBER olduğunu. Bütün isimler varaible adlandırma izleyin. > $ Öneki gerekmez - sadece sapması öncesinde bir üye değişken olmasıdır. http://www.php.net/manual/en/language.variables.basics.php

{0} wveyaks, because {} indicates that the identifier is the result of the simple expression inside. So {$x} is the same as $x in this case, but {0} is not the same as '0', since they result in different parser tokens.

XML elements cannot begin with a digit. Eğer bir şekilde bu tür unsurları, SimpleXML (ve büyük olasılıkla, çoğu ayrıştırıcılarını) oluşturabilirsiniz bile sonuç belgesini okumak mümkün olmayacaktır.

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

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

Ben SimpleXML hep nesneleri döndürür çünkü "0" adlı düğümler ama görüyoruz hata ile ilgili bu iş ne olduğunu bilmiyorum. Eğer bir sayı olarak sonucu kullanmak zorunda kalırsanız, örneğin, uygun türü için döküm

number_format((int) $ruleXml->HourlyUsage)