Ответ 1
$answer
уже может работать как массив. Вы можете сделать это, если вы хотите поместить его в реальный массив,
$array = array();
foreach($answer as $k => $v) {
$array[$k] = $v;
}
Переменная $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) {
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;
}
эта функция анализирует 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;
}