【问题标题】:How to arrange in alphabetical order using php如何使用php按字母顺序排列
【发布时间】:2011-09-08 00:41:02
【问题描述】:

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

文件 1

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

文件 2

Acapulco
Ackerman
Acta
Adam
Adams
Adamson

这只是一个示例列表,文件包含超过 10000 个条目,单词可以按任何顺序排列。但让事情变得简单的一件事是每一行只包含一个单词。现在,我知道如何使用 php 逐一读取这些值,但我无法理解 如何合并这两个文件并按字母顺序排序。 谁能建议我如何进行排序部分? p>

编辑

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

进一步编辑

我想消除文件中的重复值。就像如果有两个相同的词,那么它应该只取一次。

【问题讨论】:

  • 是的,各个文件的排序都很好。
  • 你可以使用 file() 函数获取数组然后调用array_sort

标签: php string sorting


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    $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:确保您对文件具有读取权限并且其中包含内容。
    • 还有一件事,这有助于合并重复值吗?
    • @Coding-Freak:我更新了对array_unique 的调用,它删除了重复的数组项。
    【解决方案3】:
    $lines = array_merge(file('file1.txt'), file('file2.txt'));
    sort($lines);
    

    【讨论】:

      【解决方案4】:

      由于单个文件是单独排序的,因此您可以执行合并排序类型的算法。

      这是一些伪代码:

      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的排序函数是快速排序算法O(n log(n)),这种方式是O(n)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-19
        • 1970-01-01
        • 2014-12-17
        • 1970-01-01
        • 2020-03-29
        • 1970-01-01
        相关资源
        最近更新 更多