如何从php中的多维对象中访问值

时间:2009-11-27 21:30:11

标签: php simplexml

以下是相关数组的一部分:

Array
(
    [Pricing] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [MType] => A
                            [PType] => JBN
                        )

                    [PSNumber] => 19753
                [CCode] => USD
                [EDate] => 2008-12-19
                [Price] => 218.23
            )

现在我想访问'Ptype'和'Price'的值。

'价格'很简单$a = (float) $price_a['Pricing'][0]->Price;

但是我无法弄清楚'Ptype'我已经尝试了所有内容,而我得到的最接近的是$price_a['Pricing'][0]->{@attributes}

输出:

    SimpleXMLElement Object
(
)

我确信这有一个简单的解决方案,我很想念它,所以任何帮助都表示赞赏。谢谢!

3 个答案:

答案 0 :(得分:2)

$ptype = $price_a['Pricing'][0]->attributes()->Ptype;

答案 1 :(得分:2)

不是吗:

$price_a['Pricing'][0]->attributes()->PType

答案 2 :(得分:2)

razass,你必须改变你看到SimpleXML的方式。忘记对象和数组。 检查SimpleXMLElement var_dump(),否则您会感到困惑。您肯定必须将节点放入数组中才能访问它们,这没有意义。

在SimpleXML中,您使用->(如对象的属性)访问节点,并使用属性,就像它们是数组索引一样。例如

$xml->node;
$xml['attribute'];

发布您的源XML,而不是发布var_dump()的输出。例如,猜测你的实际XML,代码就像

$Pricings = simplexml_load_string(
    '<Pricings>
        <Pricing MType="A" PType="JBN">
            <PSNumber>19753</PSNumber>
            <CCode>USD</CCode>
            <EDate>2008-12-19</EDate>
            <Price>218.23</Price>
        </Pricing>
        <Pricing MType="B" PType="XYZ">
            <PSNumber>12345</PSNumber>
            <CCode>USD</CCode>
            <EDate>2008-12-19</EDate>
            <Price>218.23</Price>
        </Pricing>
    </Pricings>'
);

// value of the first node's @PType
$Pricings->Pricing[0]['Ptype'];

// value of the first node's Price
$Pricings->Pricing[0]->Price;

// value of the second node's @PType
$Pricings->Pricing[1]['Ptype'];

如果您的代码比这更复杂,那么您做错了,而您只是在寻找麻烦。请记住,它被称为简单 XML。