如何使用PHP进行文本差异比较?

5

如何在PHP中实现最佳方法?是否有任何PHP函数可以处理此事,考虑到列内容可能非常大?

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

谢谢。

3个回答

10

PHP没有内置的diff函数。但是,感谢PEAR:Text_Diff (虽然我从未使用过,但我相信它在PEAR中)。

甚至还有一个PECL包,xdiff

提示:PEAR类是纯PHP,PECL包是模块。通常,模块比类更快,但这也取决于功能。您只需要进行测试和评估。

对于存储:我会存储纯文本,而不是差异。空间便宜,许多数据库(例如mysql)支持数据压缩(或者您可以在php中进行解压缩),但如果您存储纯文本,则独立于差异算法,并且如果需要,可以随后更改其内容。

如果需要速度,您可以同时存储纯文本和差异。


你可以在这里看到Text_Diff可以使用xdiff。@hitautodestruct,你可以在这里找到示例:https://pear.php.net/manual/en/package.text.text-diff.intro.renderers.php。 - user1544337

4
通常的流程是存储每个不同的修订版本,在用户想要查看它时计算差异,如果这个过程很耗费资源,可以考虑缓存输出结果。
你可以存储一个基本版本,然后有一组可以应用于获取先前版本的差异。
在任何情况下,都需要做出让步;第一种选择使得检索特定版本的成本较低,但需要更多的处理来进行差异比较;第二种选择使得差异查看变得便宜,但可能需要昂贵的增量打补丁才能获得特定版本。

1
但是首先如何做DIFF呢?PHP有任何内置函数吗? - uuɐɯǝʃǝs

0
如果内容非常大且只有轻微更改,您可以考虑采用“反向增量”方法:仅将文本的最新版本以完整格式存储,而上一个版本是从最新版本到上一个版本的差异。
这将节省大量存储空间,但是比较修改次数较多的两个版本时,处理成本可能相当大。毕竟,存储空间和处理要求之间总是存在权衡。
如果您无法或不想使用PEAR和PECL,则仍然可以使用由exec调用的diff实用程序。我肯定会选择标准的diff格式,绝不会开发自己的格式。

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