Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用php按字母顺序排列_Php_String_Sorting - Fatal编程技术网

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

如何使用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逐个读取这些值,但我不明白如何合并这两个文件并按字母顺

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

文件1

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