将.txt文档插入到选择下拉列表中?

问题描述:

我不知道这是否是这样做的最好办法,或者如果它甚至有可能但我想要做到的,是呼应了所有这些国家的名单中选择下拉这里是清单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

备注:中的.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

简短的回答是肯定的是可能的,但它是最好的方法是什么? 没有,实在不行,还有比纯文本存储等诸多更好的方法。

如果你请教我会告诉你从一个数据库表或从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

一个简单的例子,这当然需要更多的爱:

<?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