2010-01-08 50 views
0

我工作的一個網站,用戶可以選擇自己的國家,現在我已經創建包含了像它的代碼爲意大利阿拉國家名稱和相關代碼數組:一個php數組上的世界國家,如果靜態更好?

<?php 
$nations[] = array ("code" => "af", "name" => "Afghanistan"); 
$nations[] = array ("code" => "ax", "name" => "Aland Islands"); 
$nations[] = array ("code" => "al", "name" => "Albania"); 
$nations[] = array ("code" => "dz", "name" => "Algeria"); 
$nations[] = array ("code" => "as", "name" => "American Samoa"); 
$nations[] = array ("code" => "ad", "name" => "Andorra"); 
$nations[] = array ("code" => "ao", "name" => "Angola"); 
$nations[] = array ("code" => "ai", "name" => "Anguilla"); 
$nations[] = array ("code" => "aq", "name" => "Antartica"); 
$nations[] = array ("code" => "ag", "name" => "Antigua and Barbuda"); 
$nations[] = array ("code" => "ar", "name" => "Argentina"); 
$nations[] = array ("code" => "am", "name" => "Armenia"); 
$nations[] = array ("code" => "aw", "name" => "Aruba"); 
$nations[] = array ("code" => "au", "name" => "Australia"); 
$nations[] = array ("code" => "at", "name" => "Austria"); 
$nations[] = array ("code" => "az", "name" => "Azerbaijan"); 
$nations[] = array ("code" => "bs", "name" => "Bahamas"); 
$nations[] = array ("code" => "bh", "name" => "Bahrain"); 
$nations[] = array ("code" => "bd", "name" => "Bangladesh"); 
// etc... for 245 array elements 
?> 

當我加載其中,用戶可以選擇自己的國家,我使用的功能頁打印所有數據:

<?php 

function get_nation_name ($code = "") { 
    global $nations; 
    for ($n = 0; $n < count ($nations); $n ++) { 
     if ($code == $nations[$n]["code"]) return $nations[$n]["name"]; 
    } 
} 

function nation_select_option ($attributes, $code = "") { 
    global $nations; 
    $nation_name = get_nation_name ($code); 

    $html = " <select $attributes>\r"; 
    for ($n = 0; $n < count ($nations); $n ++) { 
     if ($nation == $nations[$n]["code"]) $html .= "  <option selected=\"selected\" value='".$nations[$n]["code"]."'>".$nations[$n]["name"]."</option>\r"; 
     else $html .= "  <option value='".$nations[$n]["code"]."'>".$nations[$n]["name"]."</option>\r"; 
    } 
    $html.= " </select>\r"; 

    return $html; 
} 

?> 

這是非常有用的,因爲如果用戶已經選擇了一個國家,他可以與前一個選擇加載整個列表,但它不是很合適!

我應該使用另一種方式來做到這一點,或者它可以被充分優化嗎?

<?php 

print nation_select_option ('id="my_css_id"', "ar"); // ar => Argentina code 
?> 
+0

你爲什麼不直接使用它?我的意思是將完整的國家名稱存儲在用戶的行中? – MoeAmine

回答

24

我會做沒有任何意義像這樣:

/** 
* ISO-3166-1 http://en.wikipedia.org/wiki/ISO_3166-1 
*/ 
var $countries = array (
    'AF' => 'Afghanistan', 
    'AX' => 'Åland Islands', 
    'AL' => 'Albania', 
    'DZ' => 'Algeria', 
    'AS' => 'American Samoa', 
    'AD' => 'Andorra', 
    'AO' => 'Angola', 
    'AI' => 'Anguilla', 
    'AQ' => 'Antarctica', 
    'AG' => 'Antigua and Barbuda', 
    'AR' => 'Argentina', 
    'AM' => 'Armenia', 
    'AW' => 'Aruba', 
    'AU' => 'Australia', 
    'AT' => 'Austria', 
    'AZ' => 'Azerbaijan', 
    'BS' => 'Bahamas', 
    'BH' => 'Bahrain', 
    'BD' => 'Bangladesh', 
    'BB' => 'Barbados', 
    'BY' => 'Belarus', 
    'BE' => 'Belgium', 
    'BZ' => 'Belize', 
    'BJ' => 'Benin', 
    'BM' => 'Bermuda', 
    'BT' => 'Bhutan', 
    'BO' => 'Bolivia, Plurinational State of', 
    'BA' => 'Bosnia and Herzegovina', 
    'BW' => 'Botswana', 
    'BV' => 'Bouvet Island', 
    'BR' => 'Brazil', 
    'IO' => 'British Indian Ocean Territory', 
    'BN' => 'Brunei Darussalam', 
    'BG' => 'Bulgaria', 
    'BF' => 'Burkina Faso', 
    'BI' => 'Burundi', 
    'KH' => 'Cambodia', 
    'CM' => 'Cameroon', 
    'CA' => 'Canada', 
    'CV' => 'Cape Verde', 
    'KY' => 'Cayman Islands', 
    'CF' => 'Central African Republic', 
    'TD' => 'Chad', 
    'CL' => 'Chile', 
    'CN' => 'China', 
    'CX' => 'Christmas Island', 
    'CC' => 'Cocos (Keeling) Islands', 
    'CO' => 'Colombia', 
    'KM' => 'Comoros', 
    'CG' => 'Congo', 
    'CD' => 'Congo, the Democratic Republic of the', 
    'CK' => 'Cook Islands', 
    'CR' => 'Costa Rica', 
    'CI' => "Côte d'Ivoire", 
    'HR' => 'Croatia', 
    'CU' => 'Cuba', 
    'CY' => 'Cyprus', 
    'CZ' => 'Czech Republic', 
    'DK' => 'Denmark', 
    'DJ' => 'Djibouti', 
    'DM' => 'Dominica', 
    'DO' => 'Dominican Republic', 
    'EC' => 'Ecuador', 
    'EG' => 'Egypt', 
    'SV' => 'El Salvador', 
    'GQ' => 'Equatorial Guinea', 
    'ER' => 'Eritrea', 
    'EE' => 'Estonia', 
    'ET' => 'Ethiopia', 
    'FK' => 'Falkland Islands (Malvinas)', 
    'FO' => 'Faroe Islands', 
    'FJ' => 'Fiji', 
    'FI' => 'Finland', 
    'FR' => 'France', 
    'GF' => 'French Guiana', 
    'PF' => 'French Polynesia', 
    'TF' => 'French Southern Territories', 
    'GA' => 'Gabon', 
    'GM' => 'Gambia', 
    'GE' => 'Georgia', 
    'DE' => 'Germany', 
    'GH' => 'Ghana', 
    'GI' => 'Gibraltar', 
    'GR' => 'Greece', 
    'GL' => 'Greenland', 
    'GD' => 'Grenada', 
    'GP' => 'Guadeloupe', 
    'GU' => 'Guam', 
    'GT' => 'Guatemala', 
    'GG' => 'Guernsey', 
    'GN' => 'Guinea', 
    'GW' => 'Guinea-Bissau', 
    'GY' => 'Guyana', 
    'HT' => 'Haiti', 
    'HM' => 'Heard Island and McDonald Islands', 
    'VA' => 'Holy See (Vatican City State)', 
    'HN' => 'Honduras', 
    'HK' => 'Hong Kong', 
    'HU' => 'Hungary', 
    'IS' => 'Iceland', 
    'IN' => 'India', 
    'ID' => 'Indonesia', 
    'IR' => 'Iran, Islamic Republic of', 
    'IQ' => 'Iraq', 
    'IE' => 'Ireland', 
    'IM' => 'Isle of Man', 
    'IL' => 'Israel', 
    'IT' => 'Italy', 
    'JM' => 'Jamaica', 
    'JP' => 'Japan', 
    'JE' => 'Jersey', 
    'JO' => 'Jordan', 
    'KZ' => 'Kazakhstan', 
    'KE' => 'Kenya', 
    'KI' => 'Kiribati', 
    'KP' => "Korea, Democratic People's Republic of", 
    'KR' => 'Korea, Republic of', 
    'KW' => 'Kuwait', 
    'KG' => 'Kyrgyzstan', 
    'LA' => "Lao People's Democratic Republic", 
    'LV' => 'Latvia', 
    'LB' => 'Lebanon', 
    'LS' => 'Lesotho', 
    'LR' => 'Liberia', 
    'LY' => 'Libyan Arab Jamahiriya', 
    'LI' => 'Liechtenstein', 
    'LT' => 'Lithuania', 
    'LU' => 'Luxembourg', 
    'MO' => 'Macao', 
    'MK' => 'Macedonia, the former Yugoslav Republic of', 
    'MG' => 'Madagascar', 
    'MW' => 'Malawi', 
    'MY' => 'Malaysia', 
    'MV' => 'Maldives', 
    'ML' => 'Mali', 
    'MT' => 'Malta', 
    'MH' => 'Marshall Islands', 
    'MQ' => 'Martinique', 
    'MR' => 'Mauritania', 
    'MU' => 'Mauritius', 
    'YT' => 'Mayotte', 
    'MX' => 'Mexico', 
    'FM' => 'Micronesia, Federated States of', 
    'MD' => 'Moldova, Republic of', 
    'MC' => 'Monaco', 
    'MN' => 'Mongolia', 
    'ME' => 'Montenegro', 
    'MS' => 'Montserrat', 
    'MA' => 'Morocco', 
    'MZ' => 'Mozambique', 
    'MM' => 'Myanmar', 
    'NA' => 'Namibia', 
    'NR' => 'Nauru', 
    'NP' => 'Nepal', 
    'NL' => 'Netherlands', 
    'AN' => 'Netherlands Antilles', 
    'NC' => 'New Caledonia', 
    'NZ' => 'New Zealand', 
    'NI' => 'Nicaragua', 
    'NE' => 'Niger', 
    'NG' => 'Nigeria', 
    'NU' => 'Niue', 
    'NF' => 'Norfolk Island', 
    'MP' => 'Northern Mariana Islands', 
    'NO' => 'Norway', 
    'OM' => 'Oman', 
    'PK' => 'Pakistan', 
    'PW' => 'Palau', 
    'PS' => 'Palestinian Territory, Occupied', 
    'PA' => 'Panama', 
    'PG' => 'Papua New Guinea', 
    'PY' => 'Paraguay', 
    'PE' => 'Peru', 
    'PH' => 'Philippines', 
    'PN' => 'Pitcairn', 
    'PL' => 'Poland', 
    'PT' => 'Portugal', 
    'PR' => 'Puerto Rico', 
    'QA' => 'Qatar', 
    'RE' => 'Réunion', 
    'RO' => 'Romania', 
    'RU' => 'Russian Federation', 
    'RW' => 'Rwanda', 
    'BL' => 'Saint Barthélemy', 
    'SH' => 'Saint Helena', 
    'KN' => 'Saint Kitts and Nevis', 
    'LC' => 'Saint Lucia', 
    'MF' => 'Saint Martin (French part)', 
    'PM' => 'Saint Pierre and Miquelon', 
    'VC' => 'Saint Vincent and the Grenadines', 
    'WS' => 'Samoa', 
    'SM' => 'San Marino', 
    'ST' => 'Sao Tome and Principe', 
    'SA' => 'Saudi Arabia', 
    'SN' => 'Senegal', 
    'RS' => 'Serbia', 
    'SC' => 'Seychelles', 
    'SL' => 'Sierra Leone', 
    'SG' => 'Singapore', 
    'SK' => 'Slovakia', 
    'SI' => 'Slovenia', 
    'SB' => 'Solomon Islands', 
    'SO' => 'Somalia', 
    'ZA' => 'South Africa', 
    'GS' => 'South Georgia and the South Sandwich Islands', 
    'ES' => 'Spain', 
    'LK' => 'Sri Lanka', 
    'SD' => 'Sudan', 
    'SR' => 'Suriname', 
    'SJ' => 'Svalbard and Jan Mayen', 
    'SZ' => 'Swaziland', 
    'SE' => 'Sweden', 
    'CH' => 'Switzerland', 
    'SY' => 'Syrian Arab Republic', 
    'TW' => 'Taiwan, Province of China', 
    'TJ' => 'Tajikistan', 
    'TZ' => 'Tanzania, United Republic of', 
    'TH' => 'Thailand', 
    'TL' => 'Timor-Leste', 
    'TG' => 'Togo', 
    'TK' => 'Tokelau', 
    'TO' => 'Tonga', 
    'TT' => 'Trinidad and Tobago', 
    'TN' => 'Tunisia', 
    'TR' => 'Turkey', 
    'TM' => 'Turkmenistan', 
    'TC' => 'Turks and Caicos Islands', 
    'TV' => 'Tuvalu', 
    'UG' => 'Uganda', 
    'UA' => 'Ukraine', 
    'AE' => 'United Arab Emirates', 
    'GB' => 'United Kingdom', 
    'US' => 'United States', 
    'UM' => 'United States Minor Outlying Islands', 
    'UY' => 'Uruguay', 
    'UZ' => 'Uzbekistan', 
    'VU' => 'Vanuatu', 
    'VE' => 'Venezuela, Bolivarian Republic of', 
    'VN' => 'Viet Nam', 
    'VG' => 'Virgin Islands, British', 
    'VI' => 'Virgin Islands, U.S.', 
    'WF' => 'Wallis and Futuna', 
    'EH' => 'Western Sahara', 
    'YE' => 'Yemen', 
    'ZM' => 'Zambia', 
    'ZW' => 'Zimbabwe' 
); 


function getCountry($code) { 
    $code = strtoupper($code); 
    if (array_key_exists($code, $countries)) { 
     return $countries[$code]; 
    } 
    return false; 
} 

它總是最好使用鍵數組中的意義,所以你不必來遍歷它來獲取你所需要的價值。

+0

謝謝,這是大力優化! – vitto

+0

+1以所有懶惰編碼器的名義 –

4

無法顯示所有200多個國家/地區,我建議您可以以建議/搜索框的形式進行此操作。在「AFG」用戶類型和你asynchrounously返回:

「阿富汗」

有中顯示哪些用戶不需要:)

+0

所以你建議我在阿賈克斯的東西?好點子!我會做的! – vitto

相關問題