Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 需要通过WSDL返回对大量数据进行排序_Php_Html_Database_Arrays_Wsdl - Fatal编程技术网

Php 需要通过WSDL返回对大量数据进行排序

Php 需要通过WSDL返回对大量数据进行排序,php,html,database,arrays,wsdl,Php,Html,Database,Arrays,Wsdl,我有一个复杂的问题,需要一些指导。我们是一家非营利性机构,负责认证世界各地的工厂是否符合道德标准。我们有一个WSDL web服务,它返回全球各国认证工厂的名称和联系信息。它接受三个字母的字符串作为参数(即孟加拉国为BGD,中国为CHN,哥伦比亚为COL) 我设计了一个带有HTML选择的页面,用户可以选择一个国家并查看工厂列表。我想写一个过滤器,只把有认证工厂的国家放在这个列表中,把没有认证工厂的国家排除在外 我已经编写了以下代码来完成这项工作,但是它的速度非常慢,并且使网站陷入困境。(为了简洁起

我有一个复杂的问题,需要一些指导。我们是一家非营利性机构,负责认证世界各地的工厂是否符合道德标准。我们有一个WSDL web服务,它返回全球各国认证工厂的名称和联系信息。它接受三个字母的字符串作为参数(即孟加拉国为
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方法,那么每个页面加载只需要进行一次调用


希望这是有意义的。

我应该注意:我的问题是,有没有人对如何提高效率有任何想法?