object(stdClass)#2 (1) { ["GetExchangeRatesResult"]=> string(6183) " 149 2016-08-10T00:00:00+02:00 978 EUR ЕМУ 1 61.1876 61.4951 61.8026 EMU евро Euro 2016-08-09T00:00:00+02:00 149 2016-08-10T00:00:00+02:00 840 USD С А Д 1 55.2335 55.511 55.7886 USA САД долар US dollar 2016-08-09T00:00:00+02:00 149 2016-08-10T00:00:00+02:00 826 GBP В.Британија 1 71.6483 72.0083 72.3684 U.K. британска фунта British pound 2016-08-09T00:00:00+02:00 149 2016-08-10T00:00:00+02:00 756 CHF Швајцарија 1 56.1406 56.4227 56.7048 Switzerland швајцарски франк Swiss franc 2016-08-09T00:00:00+02:00 149 2016-08-10T00:00:00+02:00 752 SEK Шведска 1 6.4493 6.4817 6.5141 Sweden шведска круна Swedish krona 2016-08-09T00:00:00+02:00 149 2016-08-10T00:00:00+02:00 578 NOK Норвешка 1 6.5392 6.5721 6.605 Norway норвешка круна Norwegian krone 2016-08-09T00:00:00+02:00 149 2016-08-10T00:00:00+02:00 392 JPY Јапонија 1 0.5402 0.5429 0.5456 Japan јапонски јен Japanese yen 2016-08-09T00:00:00+02:00 149 2016-08-10T00:00:00+02:00 208 DKK Данска 1 8.2278 8.2691 8.3105 Denmark данска круна Danish krone 2016-08-09T00:00:00+02:00 149 2016-08-10T00:00:00+02:00 124 CAD Канада 1 42.0043 42.2153 42.4264 Canada канадски долар Canadian dollar 2016-08-09T00:00:00+02:00 149 2016-08-10T00:00:00+02:00 36 AUD Австралија 1 42.3063 42.5189 42.7315 Australia австралиски долар Australian dollar 2016-08-09T00:00:00+02:00 " }
我从SOAP请求中得到了上面的响应。但我无法将其解析为数组或至少是Json。
这是我尝试过的:
$xml = preg_replace(“/(<\/?)(\w+):([^>]*>)/”, “$1$2$3”, $xml);
$xml = simplexml_load_string($xml);
$json = json_encode($xml);
$responseArray = json_decode($json,true);
使用时:
function simpleXmlElement2array($xmlObject, $out = array()) {
foreach ((array)$xmlObject as $index => $node) {
$out[$index] = (is_object($node) || is_array($node)) ? self::SimpleXmlElement2array($node) : $node;
}
return $out;
}
我明白了:
Array
(
[GetExchangeRatesResult] =>
149
2016-08-10T00:00:00+02:00
978
EUR
ЕМУ
1
61.1876
61.4951
61.8026
EMU
евро
Euro
2016-08-09T00:00:00+02:00
149
2016-08-10T00:00:00+02:00
840
USD
С А Д
1
55.2335
55.511
55.7886
USA
САД долар
US dollar
2016-08-09T00:00:00+02:00
149
2016-08-10T00:00:00+02:00
826
GBP
В.Британија
1
71.6483
72.0083
72.3684
U.K.
британска фунта
British pound
2016-08-09T00:00:00+02:00
149
2016-08-10T00:00:00+02:00
756
CHF
Швајцарија
1
56.1406
56.4227
56.7048
Switzerland
швајцарски франк
Swiss franc
2016-08-09T00:00:00+02:00
149
2016-08-10T00:00:00+02:00
752
SEK
Шведска
1
6.4493
6.4817
6.5141
Sweden
шведска круна
Swedish krona
2016-08-09T00:00:00+02:00
149
2016-08-10T00:00:00+02:00
578
NOK
Норвешка
1
6.5392
6.5721
6.605
Norway
норвешка круна
Norwegian krone
2016-08-09T00:00:00+02:00
149
2016-08-10T00:00:00+02:00
392
JPY
Јапонија
1
0.5402
0.5429
0.5456
Japan
јапонски јен
Japanese yen
2016-08-09T00:00:00+02:00
149
2016-08-10T00:00:00+02:00
208
DKK
Данска
1
8.2278
8.2691
8.3105
Denmark
данска круна
Danish krone
2016-08-09T00:00:00+02:00
149
2016-08-10T00:00:00+02:00
124
CAD
Канада
1
42.0043
42.2153
42.4264
Canada
канадски долар
Canadian dollar
2016-08-09T00:00:00+02:00
149
2016-08-10T00:00:00+02:00
36
AUD
Австралија
1
42.3063
42.5189
42.7315
Australia
австралиски долар
Australian dollar
2016-08-09T00:00:00+02:00
)
我至少希望能够像$arr['12']
答案 0 :(得分:1)
很久以前我尝试过递归方法(适用于节点)。 我找到了我的旧代码,rmemeber递归受到限制(你可以在服务器设置中更改它):
public static function SimpleXmlElement2array($xmlObject, $out = array())
{
foreach ((array)$xmlObject as $index => $node) {
$out[$index] = (is_object($node) || is_array($node)) ? self::SimpleXmlElement2array($node) : $node;
}
return $out;
}
修改强> 好吧,我不明白你想做什么。 问题是数据无效。 当我从节点获取字符串值并尝试:
$temp = explode(' ', trim($string));
print_r(array_chunk($temp, 13));
resluts无效。每次尝试爆炸或使用空格作为分隔符进行解析都会失败,因为部分840 USD С А Д
应为840 USD САД
如果不是这种情况,你可以使用abodive代码。如果你得到这种具有不规则结构的响应,那么我不知道如何在没有硬编码的情况下解析它,使用正则表达式解析每个值。