2012-08-13 25 views
10

首先,這是這四個問題如出一轍:PHP/JS文本DIFF

它好像自從這些問題首次被問到後,時代已經發生了變化,我想知道什麼是一個好工具這種比較現在是一天嗎?我已經看過了(另外對這些問題):

但所有那些我得到的要麼是unmantained現在還是顯得有點狡猾,因爲它們用得不那麼多(有些甚至暗示它們不是非常高效),而梨子則擔心我。我不喜歡爲一個小模塊安裝PEAR,不僅如此,它似乎像通過我自己的窗口將磚塊安裝到這樣一個小模塊,與PEAR相比,不僅如此,而且模塊已被替換並放置在不同的頻道(不知道爲什麼?)。我會使用PEAR版本,如果它是我唯一的選擇,但我想使用最新的軟件包。

有沒有人知道PHP和/或JavaScript(也是JQuery)的一個很好的使用和當前維護或內置的函數(即使它是PHP擴展)文本差異?

回答

2

好,所以它已經有一段時間了。

我實際上決定環視別人使用什麼,並偶然發現Yii(http://www.yiiframework.com)的用途。

他們實際上使用PEAR模塊作爲text_diff,他們在部落頻道上以新形式使用它。看起來text_diff現在是一個horde項目,但您可以輕鬆地將它的一個版本集成到您的應用程序中,這就是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

你試過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 

因爲str_replace()與一個 陣列,而不是一個字符串喂這可以處理$s2 = 'ghiabcdef';爲好。

+0

事實上,它確實給了我不同之處,我也在考慮如何使用這一點,但如果想要展示兩本書之間的差異,比如一本書的描述,一本來自我自己的內部數據源,一本來自外部數據資源?像SO編輯一樣。 – Sammaye 2012-08-13 16:58:58

+0

是的,我不知道有任何簡單的方法來比較兩個文本塊,只有兩個字符串。希望別人會有一些建議。 – 2012-08-13 17:04:08