2012-08-13 17 views
10

まず第一に、これはこれらの4つの質問の正確な複製である:PHP/JSテキスト差分

それはあるかのように思えますこれらの質問が最初に尋ねられたので、時代が変わってきました。私は何が良いツールであると思っていますか?このような比較のための今の日ですか?私は(さらにそれらの質問に)見てきました:

しかし、私が得るもののすべてが今のいずれかunmantainedあるかに見えます彼らはそれほど使用されていないという点で少し駄目であり(そして、彼らはそれほど実演者ではないというヒントもあります)、PEARの方は私を心配しています。私はPEARを一つの小さなモジュールだけにインストールするのは嫌いですが、それだけでなくPEARと比較して小さなモジュールのためにそれをインストールするために私自身のウィンドウを通してレンガを投げるように思えますが、モジュールは置き換えられて別のチャンネル(dunnoなぜ?)。私の唯一の選択肢であればPEARバージョンを使用しますが、最新のパッケージを使用したいと思います。

よく使用されていて、現在メンテナンスされているか、または組み込み関数(PHP拡張機能であっても)を知っている人はいますか?PHPおよび/またはJavaScript(JQueryも同様です)のテキスト差分ですか?

答えて

2

だからしばらくありました。

実際に他の人が使っているものを見回すことにしましたが、Yii(http://www.yiiframework.com)が使用するものを偶然見つけました。

彼らは実際にtext_diffのためにPEARモジュールを使用しており、それらはhordeチャネルの新しいフォームで使用します。 text_diffは今や大規模なプロジェクトになっているようですが、あなたのアプリケーションにそのバージョンを簡単に統合することができます。それはYiiがデフォルトで行うことです(バージョンにあらかじめバンドルされています)。

だから私は、彼らはそれを使用し、どのようにそれに入るために、私が出会った方法を見つけるために少し周りを検索:自分のGIIモジュール(http://www.yiiframework.com/doc/api/1.1/CCodeGenerator/)のため

CCodeGenerator
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.'); 
} 

diffed出力を生成し、2つのファイルの内容を読み取ることで

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

:彼らは実際にPEARモジュールにフックどこ重要な部分です。

元々私は膨張のためにPEARを使いたくなかったが、完全に機能したtext_diffのためにこのモジュールはかなりスリムであったので、私はこれに同行することに決めた。それだけでなく、現時点では、本当に私のために働いていたのはtext_diffモジュールなので、最高のメモリが空いていても最高の状態を保っています。

1

this threadでフィリップの2つのソリューションのいずれかを試しましたか?

は、ここに引用:

をPHPで。 array_diffは最初の配列と2番目の配列を比較し、 はその差を返します。

$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

確かに違いがありますが、私は自分自身の内部データソースからのものと外部データからのものの2つの間の違い、ソース? SOエディタのように。 – Sammaye

+0

ええ、2つの文字列だけを比較する簡単な方法はわかりません。うまくいけば、他の誰かがいくつか提案してくれるだろう。 –