2013-03-21 83 views
0

我有一個複雜的問題,我需要一些指導。我們是一個非營利組織,對世界各地的工廠進行認證或不認證。我們有一個WSDL Web服務,它返回全球各國認證工廠的名稱和聯繫信息。它接受一個三字母字符串作爲參數(即孟加拉國的BGD,中國的CHN,哥倫比亞的COL)。需要通過WSDL返回排序大量數據

我設計了一個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; 
} 



?> 
+0

我應該注意:我的問題是沒有人有任何想法如何使這更有效? – 2013-03-21 15:31:57

回答

0

如果我們假設您可以修改Web服務,那麼我認爲解決的辦法是很明顯?

你會創建一個名爲「getCountriesWithFactories()」的新功能,用戶可以添加此服務,Web服務,運行在數據庫中查詢,而不是試圖過濾掉客戶端(在PHP中)

該調用只是retu任何有工廠的國家。編寫一個MySQL查詢(或者你正在使用的)應該很容易。

現在速度緩慢的原因是您正在遍歷每個國家並在每個國家/地區進行一次HTTP調用。因此,對於每次頁面加載,您都會對Web服務進行210次調用。

如果您可以改爲實現getCountriesWithFactories方法,則每個頁面只能加載1個調用。

希望是有道理的。