Php 需要通过WSDL返回对大量数据进行排序
我有一个复杂的问题,需要一些指导。我们是一家非营利性机构,负责认证世界各地的工厂是否符合道德标准。我们有一个WSDL web服务,它返回全球各国认证工厂的名称和联系信息。它接受三个字母的字符串作为参数(即孟加拉国为Php 需要通过WSDL返回对大量数据进行排序,php,html,database,arrays,wsdl,Php,Html,Database,Arrays,Wsdl,我有一个复杂的问题,需要一些指导。我们是一家非营利性机构,负责认证世界各地的工厂是否符合道德标准。我们有一个WSDL web服务,它返回全球各国认证工厂的名称和联系信息。它接受三个字母的字符串作为参数(即孟加拉国为BGD,中国为CHN,哥伦比亚为COL) 我设计了一个带有HTML选择的页面,用户可以选择一个国家并查看工厂列表。我想写一个过滤器,只把有认证工厂的国家放在这个列表中,把没有认证工厂的国家排除在外 我已经编写了以下代码来完成这项工作,但是它的速度非常慢,并且使网站陷入困境。(为了简洁起
BGD
,中国为CHN
,哥伦比亚为COL
)
我设计了一个带有HTML选择的页面,用户可以选择一个国家并查看工厂列表。我想写一个过滤器,只把有认证工厂的国家放在这个列表中,把没有认证工厂的国家排除在外
我已经编写了以下代码来完成这项工作,但是它的速度非常慢,并且使网站陷入困境。(为了简洁起见,我只包括了前几个国家。完整的数组包括大约210个国家。另外,factCountByCountryID()
函数返回给定国家当前的工厂数量
<?php
ini_set("soap.wsdl_cache_enabled", "0");
$client = new SoapClient("http://apollov-dev.worlddata.com:8080/WrapSystem/services/FactoriesWS?wsdl",array("trace" => 1, "exceptions" => 0));
$countryList=array("AFG"=>"Afghanistan","ALA"=>"Aland Islands","ALB"=>"Albania","DZA"=>"Algeria","ASM"=>"American Samoa","AND"=>"Andorra","AGO"=>"Angola","AIA"=>"Anguilla","ATG"=>"Antigua and Barbuda","ARG"=>"Argentina","ARM"=>"Armenia","ABW"=>"Aruba","AUS"=>"Australia","AUT"=>"Austria","AZE"=>"Azerbaijan","BHS"=>"Bahamas","BHR"=>"Bahrain","BGD"=>"Bangladesh","BRB"=>"Barbados","BLR"=>"Belarus","BEL"=>"Belgium","BLZ"=>"Belize","BEN"=>"Benin","BMU"=>"Bermuda","BTN"=>"Bhutan","BOL"=>"Bolivia","BIH"=>"Bosnia and Herzegovina","BWA"=>"Botswana","BRA"=>"Brazil","VGB"=>"British Virgin Islands","BRN"=>"Brunei Darussalam","BGR"=>"Bulgaria","BFA"=>"Burkina Faso","BDI"=>"Burundi","KHM"=>"Cambodia","CMR"=>"Cameroon","CAN"=>"Canada","CPV"=>"Cape Verde","CYM"=>"Cayman Islands");
foreach($countryList as $code=>$country)
{
$params->countryCd=$code;
$number=$client->factCountByCountryID($params);
$factval=$number->factCountByCountryIDReturn;
if($factval!=0)
{
$countriesWithFactories["$code"]="$country";
}
else continue;
}
?>
如果我们假设您可以修改web服务,那么我认为解决方案非常明显 您将创建一个名为“getCountrieswithFactorys()”的新函数。您可以将此服务添加到web服务中,并在数据库中运行查询,而不是尝试从客户端(在PHP中)筛选查询 调用只返回任何有工厂的国家/地区。编写MySQL查询(或您正在使用的任何查询)来实现这一点应该非常容易 现在速度慢的原因是你在每个国家都循环,每个国家都有一个HTTP调用,所以每加载一个页面,你就要调用210个web服务 如果您可以实现getCountriesWithFactorys方法,那么每个页面加载只需要进行一次调用
希望这是有意义的。我应该注意:我的问题是,有没有人对如何提高效率有任何想法?