SimpleXMLElement для PHP Array

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

$answer = @new SimpleXMLElement($d); 

Ниже выводится print_r ($ answer):

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

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

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

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

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

 $my_array = (array)$answer 

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

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

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

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

так вот моя модифицированная версия с поддержкой cdata.

 function SimpleXML2ArrayWithCDATASupport($xml){ $array = (array)$xml; if (count($array) == 0) { $array = (string)$xml; } if (is_array($array)) { //recursive Parser foreach ($array as $key => $value){ if (is_object($value)) { if(strpos(get_class($value),"SimpleXML")!==false){ $array[$key] = SimpleXML2ArrayWithCDATASupport($value); } } else { $array[$key] = SimpleXML2ArrayWithCDATASupport($value); } } } return $array; } 

эта функция анализирует 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; }