It seems very simple. but very strong to use.
Actually, I used to use it onto my project frequently.
Thanks to_ https://github.com/paulgb/simplediff
function diff($old, $new){ $matrix = array(); $maxlen = 0; foreach($old as $oindex => $ovalue){ $nkeys = array_keys($new, $ovalue); foreach($nkeys as $nindex){ $matrix[$oindex][$nindex] = isset($matrix[$oindex – 1][$nindex – 1]) ? $matrix[$oindex – 1][$nindex – 1] + 1 : 1; if($matrix[$oindex][$nindex] > $maxlen){ $maxlen = $matrix[$oindex][$nindex]; $omax = $oindex + 1 – $maxlen; $nmax = $nindex + 1 – $maxlen; } } } if($maxlen == 0) return array(array(‘d’=>$old, ‘i’=>$new)); return array_merge( diff(array_slice($old, 0, $omax), array_slice($new, 0, $nmax)), array_slice($new, $nmax, $maxlen), diff(array_slice($old, $omax + $maxlen), array_slice($new, $nmax + $maxlen))); } function htmlDiff($old, $new, $mode=0){ $ret = ”; $diff = diff(preg_split(“/[s]+/”, $old), preg_split(“/[s]+/”, $new)); foreach($diff as $k){ if(is_array($k)) if($mode == 0){ //추가/삭제 모두 표시 $ret .= (!empty($k[‘d’])?”<span class=’deleted’>”.implode(‘ ‘,$k[‘d’]).”</span> “:”). (!empty($k[‘i’])?”<span class=’inserted’>”.implode(‘ ‘,$k[‘i’]).”</span> “:”); }else if($mode == 1){ //삭제 내용만 표시 $ret .= (!empty($k[‘d’])?”<span class=’deleted’>”.implode(‘ ‘,$k[‘d’]).”</span> “:”); }else if($mode == 2){ //추가 내용만 표시 $ret .= (!empty($k[‘i’])?”<span class=’inserted’>”.implode(‘ ‘,$k[‘i’]).”</span> “:”); }else $ret .= $k . ‘ ‘; else $ret .= $k . ‘ ‘; } return $ret; }