10

まず、これは次の 4 つの質問の正確な複製です。

これらの質問が最初に出されてから時代が変わったように思えますが、現在このような比較を行うのに適したツールは何でしょうか? 私は(これらの質問に加えて)見ました:

しかし、私が取得したものはすべて、現在管理されていないか、あまり使用されていないという点で少し危険に思えます (そして、パフォーマンスがあまり良くないことを示唆するものさえあります)。PEAR のものは私を心配させます。それだけでなく、1 つの小さなモジュールに PEAR をインストールするのは嫌いですが、一般的な PEAR と比較して、このような小さなモジュールに PEAR をインストールするには、自分のウィンドウからレンガを投げるように思えます。別のチャンネル(理由がわからない?)。唯一の選択肢であれば PEAR バージョンを使用しますが、最新のパッケージを使用したいと考えています。

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

4

2 に答える 2

2

わかりました。しばらく時間が経ちました。

私は実際に、他の人が何を使っているかを調べて、Yii ( http://www.yiiframework.com ) が何を使っているかを見つけました。

彼らは実際に PEAR モジュールをtext_diff使用しており、horde チャネルで新しい形式で使用しています。これ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出力を生成する 2 つのファイルの内容を読み込む。

もともと私は肥大化のために PEAR を使用したくなかったのですが、このモジュールは完全な機能を備えているのに非常にスリムなtext_diffので、これを使用することにしました。それだけでなく、現時点では、これtext_diffが本当に機能する唯一のモジュールであるため、最高のものを維持しています。

于 2013-02-03T18:39:36.737 に答える
1

このスレッドで Philippe の 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

文字列ではなく配列が供給される$s2 = 'ghiabcdef';ため、これも同様に処理できます。str_replace()

于 2012-08-13T16:53:13.027 に答える