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

3
我有两个纯文本文件,其中包含一些单词,例如:
文件1
Aarhus
Abbott
Abbott's
Abel
Abelian
Abelson
Abelson's
Aberdeen
Aberdeen's

文件2
Acapulco
Ackerman
Acta
Adam
Adams
Adamson

这只是一个样本列表,文件中包含超过10000个条目,并且单词可以以任何顺序放置。但有一件事使它变得容易,那就是每一行都只包含一个单词。现在,我知道如何使用php逐个读取这些值,但我不理解如何合并这两个文件并按字母顺序排序。有人能建议我如何做排序部分吗? 编辑 还要提到的一件事:正如您所看到的,有些单词包含单引号'。请给出在排序时考虑此参数的答案。 更多编辑 我想从文件中消除重复的值。比如说如果有2个相同的单词,那么它应该只被计算一次。

是的,单个文件已经很好地排序了。 - Sujit Agarwal
你可以使用 file() 函数获取数组,然后调用 array_sort 对其进行排序。 - Khurram Ijaz
4个回答

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);

@Coding-Freak:确保您对文件具有读取访问权限,并且其中包含内容。 - user142162
还有一件事,这会帮助合并重复的值吗? - Sujit Agarwal
2
@Coding-Freak:我更新了我的答案,增加了对 array_unique 函数的调用,它可以删除数组中的重复项。 - user142162

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

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

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)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接