2012-03-24 23 views
2

我知道PHP有很多文本差異,但是我一直無法找到返回位置插入位置的位置。PHP - 獲取文本插入位置的差異報告

E.g.

Before: This is a apple 

After: This is an apple 

'Insertion of a at 8' 

。*我認爲這是8 *

所以,應在人物等級發生這種差異。我應該能夠從回報中重現'Before'文本中的'After'文本。

有什麼想法? 由於提前,

+0

可能重複 1計算在PHP文本的diff(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) – 2012-03-24 03:37:38

+0

不是重複的,因爲這些答案只提供了獲取diff的解決方案,但不完全返回插入/刪除的位置,以便可以使用它們從舊文本中完全複製新文本,如上面概述的。 – ProgrammerMan 2012-03-24 14:43:57

回答

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; 
    } 

唯一的缺點是,它返回如何獲得較長的字符串分爲更短的一個變化。


此功能扼流器,不使用它,對不起。