代码之家  ›  专栏  ›  技术社区  ›  uuɐɯǝʃǝs

如何使用PHP进行文本区分?

  •  5
  • uuɐɯǝʃǝs  · 技术社区  · 15 年前

    对PHP来说,最好的方法是什么?考虑到列内容可能非常大,是否有PHP函数可以做到这一点?

    如果PHP函数不可用,我可以调用什么shell实用程序?

    谢谢

    3 回复  |  直到 15 年前
        1
  •  10
  •   stefs    15 年前

    PHP中没有任何内置的diff函数。但是,梨万岁: Text_Diff (从来没有用过强硬,但我相信在梨)。

    甚至还有一个核桃包, xdiff

    提示:pear类是纯php,pecl包是模块。通常,模块比类快,但也取决于功能。你只需要测试和评估。

    存储:我会存储纯文本,而不是diff。空间很便宜,许多数据库(例如mysql)支持数据压缩(或者可以在php中进行de/compress),但是如果您存储纯文本,您就独立于diff算法,并且可以在以后根据需要进行更改。

    如果需要速度,可以同时存储明文和diff。

        2
  •  4
  •   Rob    15 年前

    通常的过程是存储每个不同的修订,并在用户想要查看时计算差异,如果过程很昂贵,则可能缓存该输出。

    您可以存储一个基本版本,然后拥有一组diff,这些diff可以应用于获取以前的版本。

    在这两种情况下,都需要做出让步;第一种选择使检索特定版本的成本较低,但需要进行更多的差异处理;第二种选择使差异查看成本较低,但代价可能是获取特定版本的增量修补成本较高。

        3
  •  0
  •   Csaba Kétszeri    15 年前

    如果内容非常大,而更改只是很小的,则可以考虑采用“反向增量”方法:仅以完整格式存储最新版本的文本,而以前的版本与最新版本不同。

    它将节省大量的存储空间,但是比较两个版本,其中修改的数量很大,该过程的成本可能是相当大的。毕竟,它总是在存储空间和处理需求之间进行权衡。

    如果您不能或不想使用PEAR和PECL,您仍然可以使用exec调用的diff实用程序。我肯定会使用标准的diff格式,但从不开发自己的格式。