10

首先,这是这四个问题的完全重复:

自从第一次提出这些问题以来,似乎时代已经发生了变化,我想知道现在有什么好的工具可以进行这种比较?我看过(除了这些问题):

但是我得到的所有这些要么现在没有维护,要么看起来有点狡猾,因为它们没有被太多使用(有些甚至暗示它们的性能不是很好),而 PEAR 让我担心。我讨厌为一个小模块安装 PEAR 不仅如此,而且与一般的 PEAR 相比,它似乎是从我自己的窗口扔一块砖来为这么小的模块安装它,不仅如此,而且该模块已被取代并放置在一个不同的频道(不知道为什么?)。如果这是我唯一的选择,我会使用 PEAR 版本,但我想使用最新的包。

有谁知道 PHP 和/或 JavaScript(也包括 JQuery)的一个使用良好且当前维护或内置的函数(即使它是 PHP 扩展)文本差异?

4

2 回答 2

2

好的,已经有一段时间了。

实际上,我决定看看其他人使用什么,并偶然发现了 Yii ( http://www.yiiframework.com ) 使用什么。

他们实际上使用 PEAR 模块,text_diff并在部落频道上以新形式使用它。现在看起来它text_diff是一个部落项目,但你可以很容易地将它的一个版本集成到你的应用程序中,这就是 Yii 默认所做的(它预先捆绑了它的一个版本)。

所以我四处搜索以了解他们如何使用它以及如何进入它,我遇到了:

public function actionDiff()
{
    Yii::import('gii.components.TextDiff');

    $model=$this->prepare();
    if(isset($_GET['id']) && isset($model->files[$_GET['id']]))
    {
        $file=$model->files[$_GET['id']];
        if(!in_array($file->type,array('php', 'txt','js','css')))
            $diff=false;
        elseif($file->operation===CCodeFile::OP_OVERWRITE)
            $diff=TextDiff::compare(file_get_contents($file->path), $file->content);
        else
            $diff='';

        $this->renderPartial('/common/diff',array(
            'file'=>$file,
            'diff'=>$diff,
        ));
    }
    else
        throw new CHttpException(404,'Unable to find the code you requested.');
}

CCodeGenerator他们的 Gii 模块中(http://www.yiiframework.com/doc/api/1.1/CCodeGenerator/)。重要的部分是它们实际连接到 PEAR 模块的位置:

$diff=TextDiff::compare(file_get_contents($file->path), $file->content);

通过读入产生diffed输出的两个文件的内容。

最初我不想使用 PEAR,因为它太臃肿了,但是这个模块对于一个功能齐全的功能来说非常纤薄,text_diff所以我决定使用它。不仅如此,目前,它是唯一text_diff真正为我工作的模块,所以我坚持使用最好的模块,即使最好的模块非常消耗内存。

于 2013-02-03T18:39:36.737 回答
1

您是否在此线程上尝试过 Philippe 的两种解决方案之一?

在此引用:

在 PHP 中。array_diff 将第一个数组与第二个数组进行比较并返回差值。

$a1 = str_split('abcdefghijklmnop');
$a2 = str_split('abcdefghi');
echo join('', array_diff($a1, $a2)); // jklmnop

这也将起作用:

$s1 = 'abcdefghijklmnop';
$s2 = 'abcdefghi';
echo str_replace(str_split($s2), '', $s1); // jklmnop

这也可以处理$s2 = 'ghiabcdef';,因为str_replace()输入的是数组,而不是字符串。

于 2012-08-13T16:53:13.027 回答