2011-06-03 19 views
3

安排我有一個包含一些的話,像2個純文本文件:如何按照字母順序使用PHP

文件1

Aarhus 
Abbott 
Abbott's 
Abel 
Abelian 
Abelson 
Abelson's 
Aberdeen 
Aberdeen's 

文件2

Acapulco 
Ackerman 
Acta 
Adam 
Adams 
Adamson 

這只是一個樣本列表,這些文件包含超過10000個條目,並且這些文字可以按任意順序排列。但有一件事情很簡單,就是每一行只包含一個單詞。現在,我知道如何通過一個使用PHP一個讀取這些值,但我無法理解如何合併這兩個文件,並將它們按字母順序排序。任何人都可以建議我如何做排序部分?

編輯

一兩件事提:正如你所看到的,有含'單引號一些話。請在排序時向我建議考慮此參數的答案。

進一步編輯

我想消除這些文件重複值。就像如果有兩個相同的單詞一樣,那麼它應該只被使用一次。

+0

是單獨的文件排序? – Nate 2011-06-03 18:14:46

+0

是的,單個文件排序良好。 – 2011-06-03 18:15:45

+0

你可以使用文件()函數,並得到數組,那麼只需調用array_sort – 2011-06-03 18:16:51

回答

7
$entries = array_merge(
      file('file_one', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES), 
      file('file_two', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) 
      ); 
$entries = array_unique($entries); 
sort($entries); 
+0

它不工作。沒有文件內容正在被讀取。 – 2011-06-03 18:21:43

+0

@編碼怪胎:請確保您已經閱讀訪問的文件,並且有在他們的內容。 – 2011-06-03 18:22:25

+0

還有一兩件事,這將幫助合併重複值? – 2011-06-03 18:27:23

0

存儲在數組中這兩個文件,然後使用php sort? .-。

2
$lines = array_merge(file('file1.txt'), file('file2.txt')); 
sort($lines); 
0

由於各個文件分別進行排序,你可以做算法的合併排序類型。

下面是一些僞代碼:

A -> File 1 
B -> File 2 
C -> SortedFile 
While(A and B have lines left){ 
    Left = NextLineFromA 
    Right= NextLineFromB 
    If = Left < Right // strcmp(...) 
    Write Left to C 
    Else 
    Write Right to C 
} 
// Now either A or B will have lines left 
Write all lines left from A||B to C 

或者你可以在閱讀,做一個array_merge(),其次是一種()

我想是因爲你不知道這會更快有當你調用排序重新梳理了整個事情()

php的排序功能是快速排序算法爲O(n的log(n)),並通過這種方式爲O(n)