Подтвердить что ты не робот

SimpleXMLElement для PHP-массива

Переменная $d переходит из функции file_get_contents в URL.

$answer = @new SimpleXMLElement($d);

Ниже приведен вывод print_r($answer):

SimpleXMLElement Object
(
  [Amount] => 2698
  [Status] => OK
  [State] => FL
  [Country] => USA
)

Как я могу получить значение каждого элемента и добавить в массив? Я не могу понять это.

4b9b3361

Ответ 1

$answer уже может работать как массив. Вы можете сделать это, если вы хотите поместить его в реальный массив,

$array = array();
foreach($answer as $k => $v) {
  $array[$k] = $v;
}

Ответ 2

В этом простом случае также будет выполняться кастинг типов:

$my_array = (array)$answer

Ответ 3

Это должно работать:

$xml = simplexml_load_string($xmlstring);
$json = json_encode($xml);
$array = json_decode($json,TRUE);

Ответ 4

У меня есть проблема с этой функцией, потому что типизация каждого дочернего элемента XML в массив может быть проблематичной, когда текст находится между тегами CDATA.

Я исправил это, проверив, пуст ли результат приведения типов в массив. Если это так, введите его в строку, и вы получите правильный результат.

Вот моя модифицированная версия с поддержкой CDATA:

function SimpleXML2ArrayWithCDATASupport($xml)
{   
    $array = (array)$xml;

    if (count($array) === 0) {
        return (string)$xml;
    }

    foreach ($array as $key => $value) {
        if (!is_object($value) || strpos(get_class($value), 'SimpleXML') === false) {
            continue;
        }
        $array[$key] = SimpleXML2ArrayWithCDATASupport($value);
    }

    return $array;
}

Ответ 5

эта функция анализирует xml simpleXML рекурсивный рекурсивный массив

function SimpleXML2Array($xml){
    $array = (array)$xml;

    //recursive Parser
    foreach ($array as $key => $value){
        if(strpos(get_class($value),"SimpleXML")!==false){
            $array[$key] = SimpleXML2Array($value);
        }
    }

    return $array;
}