使用PHP将文本文件过滤到A-Z列表中

时间:2009-12-07 21:15:42

标签: php regex preg-replace preg-match

我有一个文本文件:

9123 Bellvue Court
5931 Walnut Creek rd.
Andrew
Bailey
Chris
Drew
Earl
Fred
Gerald
Henry
Ida
Jake
Koman
Larry
Manny
Nomar
Omar
Perry
Quest
Raphael
State
Telleman
Uruvian
Vixan
Whales
Xavier
Yellow
Zebra

我需要做的是我需要创建一个A-Z列表......所以:

# A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

当你点击这封信时,如果我点击了A,那么只会出现一个只有以A开头的单词的表格,如果我点击#符号,则只会出现以数字开头的单词。

我正在考虑使用正则表达式来完成此操作,但我不想创建27个不同的页面。那么有没有办法在网址的末尾调用这封信?喜欢创造能够做到这一点的事情

http://mywebsite/directory.php?letter=A

3 个答案:

答案 0 :(得分:2)

一种非常简单的方法:

读入文本文件:

$inputfile = file('words.txt');

然后,在清理输入($letter = $_GET['letter'])后,您可以构建一个正则表达式:

$regex = '/^'.$letter.'/i';

并过滤您要显示的行:

$result = preg_grep($regex, $inputfile);

其余的只是输出漂亮的HTML(或输出应该是什么)


请记住:当频繁阅读页面时,将文件存储在数据库中要快得多。如果在将来的某个时间加载应该是一个问题,你还应该看一下缓存机制


编辑:忘记提及:要使#正常工作,您需要在以下内容中添加一行:

if ($letter == '#') $letter = '[0-9]';

让正则表达式再次运行。

答案 1 :(得分:0)

您可以使用

访问该变量以确定要排序的内容
$letter = $_GET["letter"]
$arrayCount = preg_match('/^'.$letter."./", $textFileContents, $matches);

这样的事情应该有效

答案 2 :(得分:0)

除非你的文件中只有几个名字,否则这很疯狂。

除非您必须非常动态,否则告诉Cron每小时/每天从中央文件缓存26个文本文件等

a.htm等

每天一次,我教会我的用户了解这是他们网站的行为方式。

(A-Z是从大约10个不同的应用程序内容创建的)