Как вы получаете имя объекта при использовании SimpleXML? - PullRequest
0 голосов
/ 07 октября 2009

Если формат следующий, где c - массив объектов, который я должен использовать для каждой итерации:

$a->b->c

И я делаю:

$z = $a->b
foreach($z as $key => $value)
echo $value['field'];

$ key имеет значение null, хотя у меня есть допустимые значения. Как я могу получить название объекта?

Ответы [ 2 ]

6 голосов
/ 07 октября 2009

XML:

<a>
  <b>
    <c />
    <d />
    <e />
  </b>
</a>

PHP код:

$xml = new SimpleXMLElement($file_url, true);
foreach($xml->b->children() as $node) {
    echo $node->getName() . "\n";
}

даст вам:

c
d
b

См. Руководство PHP для дальнейшего использования.

2 голосов
/ 07 октября 2009

Учитывая следующий фрагмент XML и код для загрузки его с SimpleXML:

$str = <<<XML
<root>
    <a>
        <b>
            <c>glop</c>
            <d>test</d>
        </b>
    </a>
</root>
XML;
$xml = simplexml_load_string($str);

Вы можете "привести" $xml->a->b к массиву, чтобы иметь возможность перебирать его:

foreach ((array)$xml->a->b as $name => $value) {
    echo "$name : $value<br />";
}

И вы получите такой вывод:

c : glop
d : test

(возможно, это не совсем та же строка XML, что и у вас, но я надеюсь, что это поможет вам найти решение - если это так, вы можете отредактировать свой вопрос, чтобы показать нам свои данные XML и результаты, которые вы хочешь получить?)

Цитирование страницы справочника, в разделе Преобразование в массив :

Если объект преобразуется в массив, Результатом является массив, элементы которого свойства объекта.
ключи имена переменных-членов, с несколько заметных исключений: целое число свойства недоступны; частный переменные имеют имя класса добавляется к имени переменной; защищенные переменные имеют '*' добавляется к имени переменной.

...