2016-03-08 83 views
0

我不知道這是否是這樣做的最好辦法,或者如果它甚至有可能但我想要做到的,是呼應了所有這些國家的名單中選擇下拉這裏是清單Country text document將.txt文檔插入到選擇下拉列表中?

所以我的問題是如何將我的選擇下拉列表顯示這些或者如果我不能做到這一點的辦法,我試圖做到這一點會是什麼做的,而無需手動添加每個國家形式的最佳方式?

<select> 
    <option value="GB: United Kingdom">GB: United Kingdom</option> 
    <option value="etc">etc</option> 
    <option value="etc">etc</option> 
    <option value="etc">etc</option> 
</select> 
+0

您可以逐行讀取文件,因此遍歷所有行然後在每次迭代中剩下要做的事情就是輸出一個select選項,您可以根據需要填寫行內容。 – arkascha

+0

你嘗試過什麼嗎?請發佈您的代碼。 – aslawin

+0

Thankyou @arkascha和aslawin我不知道從哪裏開始實現這個可能你可以提供一個例子嗎?我很欣賞你的意見,但它會很容易讓我在網上看這個知道從哪裏開始 – Peanuts

回答

0

備註:中的.txt文件在問題中提到的世界國家列表包含。它是一個固定內容的列表;它在程序執行期間不會改變,它在程序的不同執行之間不會改變。當一個條目被添加或從列表中刪除時,它有時會不經常更改。更經常地,代碼或現有項目的名稱會更改。

這個答案是針對文件的內容量身定做的。這不適合所有情況。


的最佳方式(給你要加載的文件的內容)是擁有由國家代碼的PHP代碼索引,在一個單獨的文件國名的列表。

像這樣的東西(文件listCountries.php):

<?php 
// ISO-3166 country codes 
return array(
    'AF' => 'Afghanistan', 
    'AX' => 'Åland Islands', 
    'AL' => 'Albania', 
    // ... 
); 
// This is the end of file; there is no need for a PHP close tag 

當你需要使用它,你需要做的就是寫這樣的:

$listCountries = include 'listCountries.php`; 

當然,你應該將它放在包含文件的目錄中的某個位置,並注意include行中的路徑。

然後,您可以遍歷$listCountries和生成所需的HTML代碼:

<select> 
<?php 
// Assuming the country with code $selectedCode have to be already selected in the list 
foreach ($listCountries as $code => $name) { 
    $selected = ($code == $selectedCode) ? ' selected="selected"' : ''; 
    echo('<option value="'.$code.'"'.$selected.'>'.htmlspecialchars($name)."</option>\n"); 
} 
?> 
</select> 

您可以使用搜索生成的文件,並在編輯器中替換(如果知道搜索和使用正則表達式替換),或者你可以寫一個小PHP腳本來爲您生成列表:使用PHP命令行

$listCountries = array(); 
$fh = fopen('http://www.textfixer.com/resources/dropdowns/country-list-iso-codes.txt', 'r'); 
while (! feof($fh)) { 
    list($code, $name) = fgetcsv($fh, 0, ':'); 
    $listCountries[$code] = $name; 
} 
fclose($fh); 

echo("<?php\n"); 
echo('$listCountries = '); 
var_export($listCountries); 
echo(";\n"); 
echo("// That's all, folks!\n"); 

運行它,它會傾倒的PHP代碼列表輸出。您可以將其輸出重定向到一個文件或將其更改爲將代碼寫入文件(第一個選項更簡單)。

你可以閱讀更多關於ISO-3166國家代碼上Wikipedia或者你可以直接從authoritative source獲得最新信息:在ISO。

+0

三江源非常有用 – Peanuts

+0

我只是補充說,使用'$ listCountries'生成HTML – axiac

+0

這是有問題的,因爲它不能擴展的代碼。您的方法需要將所有數據保存在內存中,甚至將其乘以幾次。這意味着隨着列表大小的增加,內存消耗會呈指數級增長。這也不允許以動態方式交換數據資源。在我看來,這並不是一個優雅的解決方案,儘管肯定有效。 – arkascha

-2

簡短的回答是肯定的是可能的,但它是最好的方法是什麼? 沒有,實在不行,還有比純文本存儲等諸多更好的方法。

如果你請教我會告訴你從一個數據庫表或從JSON做到這一點,即使從XML。

如果你要改變你的想法,並使用這些方法,我建議你一個谷歌它(你可以找到適合你的應用程序結構)。

任何方式指導我最近使用這兩個:

現在在我的情況下,我使用的是JSON格式。

要訪問和填充您可以使用JavaScript,更特別的JQuery將方便的選擇,就像這樣:

$.getJSON("test.json", function(data) { 
    var items = []; 
    $.each(data, function(key, val) { 
    items.push("<option value='" + key + "'>" + val + "</option>"); 
    }); 
}); 

如需進一步信息,請檢查official manual

如果你願意來填充您的服務器上的下拉菜單,你可以做這樣的事情:

$json = file_get_contents('your_json_url'); 
$countries = json_decode($json); 
foreach ($countries as $option){ 
    echo "<option value='" .$option[key]. "'>" .$option[$value]. "</option>"; 
} 

如果你想從你的databese做的proccess過程非常類似,只要你還可以得到一個數組。

如果您仍然希望使用.txt格式,以保持@arkascha和@axiac答案是完全有效的。

希望這有助於你;)

+0

問題顯然標記爲[tag:php],您提供了Javascript解決方案。 – axiac

+0

@axiac將技術任務應用於技術永遠不是最好的方法,你應該知道,作爲用戶的體驗,他實際上清楚地徵求了建議和指導。無論如何,你是對的,我會編輯它,並添加一個PHP函數:) – Asur

+0

@axiac完成編輯成更有效的答案,感謝您的反饋 – Asur

0

一個簡單的例子,這當然需要更多的愛:

<?php 
$fh = fopen('list.text', 'r'); 
?> 

<select> 
<?php 
while ($line = fgets($fh, 1024)) { 
    echo sprintf(' <option value="%1$s">%1$s</option>'."\n", trim($line)); 
} 
?> 
</select> 

輸出顯然是:

<select> 
    <option value="AF:Afghanistan">AF:Afghanistan</option> 
    <option value="AX:Åland Islands">AX:Åland Islands</option> 
    ..... 
</select> 
+0

大答案三江源。 – Peanuts