好的,所以我从使用SOAP的服务请求州和城市,并使用'foreach'循环输出状态,并且在每个迭代中,我正在使用另一个'foreach'循环来输出城市在每个州内。
首先,SOAP调用:
$client = new SoapClient("https://devxml.#####.com/golfService.asmx?wsdl", array(‘features’ => SOAP_SINGLE_ELEMENT_ARRAYS));
$regionList = $client->Areas(
array(
'Hdr' => array(
'ResellerId' => '#####',
'SourceCd' => 'A',
'UserIp' => '207.58.123.121',
'gsDebug' => '1'
),
'Req' => array(
'CountryID' => 'USA',
'RegionID' => ''
)
)
)
...返回以下XML:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<AreasResponse xmlns="http://xml.####.com/">
<AreasResult>
<RetCd>0</RetCd>
<RetMsg />
<Countries>
<Country>
<id>USA</id>
<nm>United States</nm>
<Regions>
<Region>
<id>AZ</id>
<nm>Arizona</nm>
<Areas>
<Area>
<id>Phoenix Northeast</id>
<nm>Phoenix Northeast</nm>
</Area>
</Areas>
</Region>
<Region>
<id>FL</id>
<nm>Florida</nm>
<Areas>
<Area>
<id>Ft. Myers/Naples</id>
<nm>Ft. Myers/Naples</nm>
</Area>
<Area>
<id>Miami / Ft. Lauderdale</id>
<nm>Miami / Ft. Lauderdale</nm>
</Area>
</Areas>
</Region>
</Regions>
</Country>
</Countries>
</AreasResult>
</AreasResponse>
</soap:Body>
</soap:Envelope>
现在,我在PHP中处理这个问题:
foreach ($regionList->AreasResult->Countries->Country->Regions->Region as $region):
echo $region->nm . ": ";
foreach ($region->Areas->Area as $area):
echo $area->nm . ", ";
endforeach;
echo "<br />";
endforeach;
理想情况下,这将输出为:
亚利桑那州:Phoenix Northeast,
佛罗里达州:英尺。迈尔斯/那不勒斯,迈阿密/英尺。代尔堡,
但不!它出现了这样:
亚利桑那州:,,, 佛罗里达州:英尺。迈尔斯/那不勒斯,迈阿密/英尺。代尔堡,
'亚利桑那州之后的两个逗号:'暗示有两个记录,但只有一个。更令人气愤的是它不会输出dang Area值。 我做错了什么?帮助我,StackOverflow,你是我唯一的希望!
答案 0 :(得分:1)
即使您正在使用单个数组元素功能,这也可能与数组未正确转换有关。我过去使用过这个函数,在这种情况下可能会起作用:
function forceList($obj, $prop)
{
$r = &$obj->$prop;
return isset($r) ? is_array($r) ? $r : array($r) : array();
}
foreach (forceList($region->Areas, 'Area') as $area) { ... }
我知道,它使用了两个三元运算符,但我测试了它; - )