2009-12-07 21 views
0

我有一個文本文件,上面寫着:使用PHP篩選文本文件到AZ上市

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 

我需要做的是我需要創建一個AZ上市...所以:

# 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個不同的頁面。那麼有沒有一種方法可以在url結尾處調用該字母?喜歡創造的東西,將做到這一點

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

回答

2

一個非常簡單的方法:

閱讀文本文件:

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

隨後,在消毒輸入($letter = $_GET['letter']),你可以建立一個正則表達式:

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

並過濾要顯示的行:

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

剩下的就是那麼簡單地輸出漂亮的HTML的問題(或任何輸出應)


請記住:當頁面被頻繁讀取,這是很多快將文件存儲在數據庫中。你也應該看看到緩存機制,如果負載應該在未來


編輯在一段時間內一個問題:忘了提:要獲得#工作,需要遵循以下添加一行:

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

讓正則表達式再次工作。

+0

好吧我會記住數據庫,並感謝您的答覆。我會讓你知道它是如何出來的! – D3V1NE 2009-12-07 21:27:17

0

是的。

您可以訪問變量來確定使用

$letter = $_GET["letter"] 
$arrayCount = preg_match('/^'.$letter."./", $textFileContents, $matches); 

類似的東西應該工作

0

那會很瘋狂,除非你只需要在文件中幾個名字進行排序的。

除非你必須可怕的動態告訴cron來從中央文件緩存26個文本文件的每一個小時/天等

這個a.htm等

每天一次做我的,我的教育我用戶瞭解這是他們網站的行爲方式。

(A-Z從大約10個不同應用程序的內容創建)