2010-01-08 23 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

相关问题