как получить индексированное значение из вывода PHP-объекта simplexml_load_file - PullRequest
1 голос
/ 05 октября 2019

Из вывода output1 ниже мы видим, что PHP simplexml_load_file переводит те же теги index, что и индексированный массив [0,1,2,3,4].

Я хотел бы узнать, как я могу получить индекс из выводаsimplexml_load_file? Я устал делать это с примером 'php2', и я получил 'output2' в ответ. Возможно ли это или как я могу получить свой вывод, как показано на «Желаемый выход2»? Заранее спасибо

test.xml:

<?xml version="1.0" encoding="utf-8"?>
<Report>
    <index><value>h</value></index>
    <index><value>e</value></index>
    <index><value>l</value></index>
    <index><value>l</value></index>
    <index><value>o</value></index>
</Report>

php1:

<?php
    $oFile = simplexml_load_file("test.xml") or die("error: Cannot create object");
    var_dump($oFile);
?>

output1:

object(SimpleXMLElement)#1 (1) 
{ 
    ["index"]=> array(5) 
    { 
        [0]=> object(SimpleXMLElement)#2 (1) { ["value"]=> string(1) "h" } 
        [1]=> object(SimpleXMLElement)#3 (1) { ["value"]=> string(1) "e" } 
        [2]=> object(SimpleXMLElement)#4 (1) { ["value"]=> string(1) "l" } 
        [3]=> object(SimpleXMLElement)#5 (1) { ["value"]=> string(1) "l" } 
        [4]=> object(SimpleXMLElement)#6 (1) { ["value"]=> string(1) "o" } 
    } 
}

php2:

<?php
    $oFile = simplexml_load_file("test.xml") or die("error: Cannot create object");
    foreach ($oFile->index as $key=>$value) {
        echo $key.': '.$value->value.'<br>';
    }
?>

output2:

index: h
index: e
index: l
index: l
index: o

требуемый выход2:

0: h
1: e
2: l
3: l
4: o

Ответы [ 3 ]

2 голосов
/ 05 октября 2019

Вы можете просто использовать счетчик, чтобы получить ключ ...

$key = 0;
foreach ( $oFile->index as $index ) {
    echo ($key++)."=>".$index->value.PHP_EOL;
}

Или, если вы собираетесь обрабатывать данные дальше, вы можете просто добавить их в массив ...

$data = [];
foreach ( $oFile->index as $index ) {
    $data[] = (string)$index->value;
}
print_r($data);

, что дает ...

Array
(
    [0] => h
    [1] => e
    [2] => l
    [3] => l
    [4] => o
)
2 голосов
/ 05 октября 2019

С простым XML больно работать:

$oFile = simplexml_load_file("test.xml");

foreach($oFile->xpath("index") as $key => $value) {
        echo "{$key}: {$value->value}<br>";
}
1 голос
/ 12 октября 2019

Поскольку вы просили более элегантный способ и сказали, что вам нужен xpath, это в основном то же самое, что и принятый ответ, но без жалоб и использования его в интересах:

foreach ($oFile->xpath('*/value') as $key => $value) {
    echo $key, ': ', $value, "\n";
}

В любом случае, если вы используете xpath, он уже превращает результат в массив SimpleXMLElements - с нулевым индексированием.

Кроме того, непосредственный запрос интересующих вас узлов дает преимущество, заключающееся в том, что он фактически превращает их текстовое содержимое в строку с помощьюechoing (который преобразует его в строку):

0: h
1: e
2: l
3: l
4: o

Надеюсь, что это пока принесет небольшую пользу для ответов.

...