PHP / JS文本差异

时间:2012-08-13 15:49:23

标签: php javascript jquery

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

似乎时间已经改变,因为这些问题是第一次被问到的,我想知道什么是现在的好工具 - 这种比较的日子?我已经看过了(除了那些问题):

但是我得到的所有这些都是现在没有使用或者看起来有点狡猾,因为他们没有那么多使用(有些人甚至暗示他们不是非常高效)而且梨子让我担心。我不喜欢为一个小模块安装PEAR,不仅如此,而且看起来像是通过我自己的窗口扔砖来安装它用于这样一个小模块,与PEAR相比,不仅如此,模块已被取代并放置在不同的频道(不知道为什么?)。我会使用PEAR版本,如果它是我唯一的选择,但我想使用最新的软件包。

有没有人知道PHP和/或JavaScript(JQuery)中使用良好且当前维护或内置函数(即使它是PHP扩展)的文本差异?

2 个答案:

答案 0 :(得分: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模块,因此我保持最佳状态,即使最好的是内存非常耗尽。

答案 1 :(得分:1)

您是否在this thread上尝试了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()会被提供   数组,而不是字符串。