Как получить доступ к значению из многомерного объекта в PHP - PullRequest
2 голосов
/ 28 ноября 2009

Вот фрагмент рассматриваемого массива:

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 ]

2 голосов
/ 28 ноября 2009

Не правда ли:

$price_a['Pricing'][0]->attributes()->PType
2 голосов
/ 28 ноября 2009

Разасс, вам абсолютно необходимо изменить способ отображения SimpleXML. Забудьте об объектах и ​​массивах. не проверяйте свой SimpleXMLElement с var_dump(), иначе вы будете в замешательстве. Вы определенно должны не помещать узлы в массивы для доступа к ним, это не имеет смысла.

В SimpleXML вы получаете доступ к узлам, используя -> (например, свойство объекта) и к атрибутам, как если бы они были индексами массива. Например

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

Вместо публикации вывода var_dump() опубликуйте исходный XML. Например, если вы угадаете ваш фактический 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'];

Если ваш код более сложен, чем вы, вы делаете это неправильно и вы только напрашиваетесь на неприятности. Помните, что он называется Simple XML.

2 голосов
/ 28 ноября 2009
$ptype = $price_a['Pricing'][0]->attributes()->Ptype;
...