如何使用php按字母顺序排列

时间:2011-06-03 18:12:01

标签: php string sorting

我有2个纯文本文件,其中包含一些单词,例如:

文件1

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

文件2

Acapulco
Ackerman
Acta
Adam
Adams
Adamson

这只是一个示例列表,文件包含超过10000个条目,并且可以按任何顺序放置单词。但有一点让人轻松就是每一行只包含一个单词。现在,我知道如何逐个使用php阅读这些值,但我无法理解如何合并这两个文件并按字母顺序排序。有人可以建议我如何进行排序部分吗?

修改

还有一件事需要提及:正如您所看到的,有些单词包含'单引号。请在排序时建议我考虑此参数的答案。

进一步编辑

我想从文件中删除重复值。就像有两个相同的单词一样,那么它应该只采用一次。

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

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

答案 2 :(得分:0)

将两个文件存储在一个数组中,然后使用php sort? .-。

答案 3 :(得分: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(),然后执行sort()

我认为这会更快,因为当你调用sort()

时你不必重新排序整个事情

php的sort函数是一种快速排序算法O(n log(n)),这种方式是O(n)