2013-11-07 2 views
0

Как получить доступ к дочерним элементам SimpleXMLElement в виде массива?Доступ к элементам дочерних элементов SimpleXMLElement как массив

SimpleXMLElement(9) { 
name => "John" (11) 
phone => array(2) [ 
    0 => "556 221 000" (19) 
    1 => "312 555 110" (19) 
] 
} 

Согласно этой статье http://www.sitepoint.com/parsing-xml-with-simplexml/ я должен легко получить доступ к нему через

$sxElement->phone[0]; 

Но сваливать возвращается только:

SimpleXMLElement(0) 

Мне нужно получить доступ к этому в течение цикла. Благодарю.

Edit (пример XML):

<company> 
    <phonebook> 
    <name>John</name> 
    <phone>556 221 000</phone> 
    <phone>312 555 110</phone> 
    </phonebook> 
</company> 

мне нужно идти через мой Еогеасп на другом объекте и прикрепить правильный телефон в соответствии со значением итератора.

+0

вы пробовали 'Еогеасп ($ sxElement-> телефон как $ значение) {}'? Вам может понадобиться 'foreach ($ sxElement-> phone as (string) $ value) {}' – TecBrat

+0

Можете ли вы разместить XML, пожалуйста? – SamV

+0

XML, прилагаемый в редакции – JCZ

ответ

1

Вы пробовали с:

$sxElement->phone[0]->__toString(); 

Надежда, что помогает.

С уважением,

Марсело

+1

Или, более «естественно», отбрасывается в строку: '(string) $ sxElement-> phone [0]' – IMSoP

+0

Работает для меня, спасибо! – JCZ

+0

Обратите внимание, что если бы вы использовали 'echo', а не' var_dump', он бы неявно выполнил этот приведение в строку. Только «var_dump» заблуждал вас мыслью о том, что элемент пуст. – IMSoP

0

Одно из решений, которое я нашел при работе с simpleXML, когда я хочу работать с массивами, - передать все это в json и из него, используя параметр «true» в json_decode(). Тогда у меня есть ассоциативный массив, который больше подходит для работы.

+0

В общем, все, что вы можете сделать после этого, вы можете сделать и раньше, если вы понимаете, как работает SimpleXML, и не поддавайтесь искушению смотреть на вывод 'print_r' или' var_dump'. – IMSoP

3

Вы должны передать данные массиву, чтобы попробовать это (это сработало для меня).

$el = new SimpleXMLElement(
    '<company> 
     <phonebook> 
     <name>John</name> 
     <phone>556 221 000</phone> 
     <phone>312 555 110</phone> 
     </phonebook> 
    </company>' 
); 

$array = (array) $el->phonebook->phone; 

Выход это array готов к манипуляциям.

Array 
(
    [0] => 556 221 000 
    [1] => 312 555 110 
) 

Другой метод, который также получит ключ.

foreach($sxElement->phone as $i => $value) { 
    echo "{$i} : {$value}" . PHP_EOL; 
} 

Хотя к этому внешнему циклу не удается получить доступ.

+0

Мне нужно получить доступ к ключу массива в соответствии с итератором некоторого внешнего foreach. Метод -> children() возвращает значение SimpleXMLElement (0). – JCZ

+0

@JCZ См. Отредактированный ответ. – SamV

+0

Опция с отливкой в ​​массив также работает, спасибо! – JCZ

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