如何使用php按字母顺序排列
我有两个纯文本文件,其中包含一些单词,如: 文件1如何使用php按字母顺序排列,php,string,sorting,Php,String,Sorting,我有两个纯文本文件,其中包含一些单词,如: 文件1 Aarhus Abbott Abbott's Abel Abelian Abelson Abelson's Aberdeen Aberdeen's 文件2 Acapulco Ackerman Acta Adam Adams Adamson 这只是一个示例列表,文件包含10000多个条目,单词可以按任意顺序排列。但有一件事让它变得简单,那就是每一行只包含一个单词。现在,我知道如何使用php逐个读取这些值,但我不明白如何合并这两个文件并按字母顺
Aarhus
Abbott
Abbott's
Abel
Abelian
Abelson
Abelson's
Aberdeen
Aberdeen's
文件2
Acapulco
Ackerman
Acta
Adam
Adams
Adamson
这只是一个示例列表,文件包含10000多个条目,单词可以按任意顺序排列。但有一件事让它变得简单,那就是每一行只包含一个单词。现在,我知道如何使用php逐个读取这些值,但我不明白如何合并这两个文件并按字母顺序排序。有人能建议我如何进行排序吗
编辑
还有一件事要提:正如您所看到的,有些单词包含一个“
单引号。请给我建议在排序时考虑这个参数的答案。< /P>
进一步编辑
我想消除文件中的重复值。就像如果有两个相同的单词,那么应该只取一次。将两个文件存储在一个数组中,然后使用?- 由于各个文件是单独排序的,因此可以执行合并排序类型的算法 下面是一些伪代码:
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
A->文件1
B->文件2
C->分拣文件
While(A和B还有行){
左=下一行froma
右=下一行fromb
If=左<右//strcmp(…)
向左写入C
其他的
直接写入C
}
//现在,A或B都将剩下行
写出从A | | B到C的所有左行
或者,您可以将它们读入,执行数组_merge(),然后执行排序()
我认为这会更快,因为在调用sort()时不必重新排序整个内容
php的排序函数是一种快速排序算法O(n log(n)),这种方法是O(n)是的,各个文件都进行了很好的排序。您可以使用file()函数获取数组,然后调用数组_sort@Coding-怪物:确保你有文件的读取权限,并且文件中有内容。还有一件事,这有助于合并重复的值吗?@Coding Freak:我更新了一个调用的答案,删除了重复的数组项。
$lines = array_merge(file('file1.txt'), file('file2.txt'));
sort($lines);
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