2012-03-24 9 views
2

PHP用のテキスト差分が多数あることに気づいていますが、位置の挿入箇所を返すものは見つかりませんでした。PHP - テキスト内に挿入された位置の差分レポートを取得する

など。

Before: This is a apple 

After: This is an apple 

'Insertion of a at 8' 

は。*私はそれがそう8 *

だ、このdiffは、文字レベルで行われるべきだと思います。戻り値から、「Before」テキストの「After」テキストを再現することができます。

どのような考えですか?事前に おかげで、

+0

1.可能な重複[PHPのテキスト差分を計算する(http://stackoverflow.com/questions/112523/calculate-text-diffs-in-php) 2. [二つの文字列間の差を強調表示しますPHPの場合](http://stackoverflow.com/questions/321294/highlight-the-difference-between-two-strings-in-php) –

+0

重複していないのは、これらの答えがdiff上で概説したように、挿入/削除の位置を正確に戻すことはできません。そのため、古いテキストから新しいテキストを完全に複製するのに使用できます。 – ProgrammerMan

答えて

0

私はいくつかの時間を過ごし、あなたのための出発点に到着しました:

function string_compare($string1, $string2) { 
     $chars1 = str_split($string1); 
     $chars2 = str_split($string2); 

     $longer = strlen($string1) > strlen($string2) ? $chars1 : $chars2; 
     $shorter = strlen($string1) > strlen($string2) ? $chars2 : $chars1; 

     $key_offset = 0; 
     $changes = array(); 

     foreach($longer as $key => $char) { 
      #$key2 = $key + $key_offset; 
      $char2 = isset($shorter[$key]) ? $shorter[$key] : ''; 

      if($char !== $char2) { 
       if(empty($char2)) { 
        $changes[$key] = array('remove' => $char); 
       } elseif(empty($char)) { 
        $changes[$key] = array('add' => $char); 
       } else { 
        $changes[$key] = array('change' => $char.' to '.$char2); 
       } 
      } 
     } 

     return $changes; 
    } 

唯一の欠点、それは短い1に長い文字列を取得する方法に変更を返すということです。


この関数はチョークします。使用しないでください。

関連する問題