2014-08-15 4 views
1

Я тяну XML-канал из блога блоггера и должен разбирать его с помощью PHP. Данные выглядит примерно так, как только я использовал функцию simplexml_load_file():проблема многомерного массива php

["entry"]=> array(25) {["link"]=> array(5) {[4]=> object(SimpleXMLElement)#571 (1) {["@attributes"]=> array(4) {["rel"]=> string(9) "alternate" 

Когда я пытаюсь целевой отн так:

echo $xmldata[0]->entry[0]->link[4]->@attributes['rel']; 

и

echo $xmldata[0]->entry[0]->link[4]->[@attributes]->rel; 

Я получаю следующие ошибки:

Parse error: syntax error, unexpected '@', expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$'

и

Parse error: syntax error, unexpected '[', expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$'

соответственно.

Любые идеи?

+0

вероятно, вам нужно цитирует 'Эхо $ XMLDATA [0] -> вход [0] -> связь [4] -> [ "@ атрибуты"] -> отн;' – danneth

ответ

2

Попробуйте так:

echo $xmldata[0]->entry[0]->link[4]['rel']; 

Basic SimpleXML usage documentation (пример # 5) показывает, как атрибуты элемента можно получить так же, как ассоциативный массив, как в приведенном выше.

+0

Почему downvote? –

0

Поскольку @ является keyword вам нужно обернуть идентификатор в фигурные скобки:

echo $xmldata[0] 
    ->entry[0] 
    ->link[4] 
    ->{'@attributes'}['rel']; 
+0

Простите, я немного смущен. Не могли бы вы вкратце объяснить, почему мой ответ считается уступающим или не полезным? Попытка учиться ... –

+0

Ну, вы должны спросить нисходящего, в любом случае, я полагаю, это неправильно, потому что в 'link [4]' есть объект, этот объект имеет свойство, называемое '@ attributes', которое представляет собой массив, который содержит' rel ', проблема состоит в том, что, являясь' @ 'ключевым словом, вы не можете получить к нему доступ так:' -> @ attributes', для этого вам нужно иметь скобки и одинарные кавычки вокруг идентификатора. Ваш ответ обходит идентификатор '@ attributes', также если есть свойство, называемое' rel', вы бы использовали 'link [4] -> rel', так как в' link [4] 'есть объект. –

+0

OK. Спасибо за ответ. В соответствии с [Basic SimpleXML documentation] (http://php.net/manual/en/simplexml.examples-basic.php) и моими собственными тестами, доступ к индексам работает отлично для атрибутов. –

2

Вам нужно обернуть @attributes в фигурные скобки и в '' кавычки.

echo $xmldata[0]->entry[0]->link[4]->{'@attributes'}['rel'] 
+0

+1, я забыл одну цитату. –

Смежные вопросы