{"id":535,"date":"2019-04-01T13:51:50","date_gmt":"2019-04-01T04:51:50","guid":{"rendered":"https:\/\/www.itchefblog.com\/?p=535"},"modified":"2019-11-11T23:29:54","modified_gmt":"2019-11-11T14:29:54","slug":"diff-source-code","status":"publish","type":"post","link":"https:\/\/www.itchefblog.com\/?p=535","title":{"rendered":"PHP &#8211; DIFF source code"},"content":{"rendered":"<p>It seems very simple. but very strong to use.<br \/>\nActually, I used to use it onto my project frequently.<\/p>\n<p>Thanks to_ https:\/\/github.com\/paulgb\/simplediff<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\nfunction diff($old, $new){\r\n\r\n  $matrix = array();\r\n  $maxlen = 0;\r\n\r\n  foreach($old as $oindex =&gt; $ovalue){\r\n\r\n    $nkeys = array_keys($new, $ovalue);\r\n    foreach($nkeys as $nindex){\r\n\r\n      $matrix[$oindex][$nindex] = isset($matrix[$oindex \u2013 1][$nindex \u2013 1]) ?\r\n      $matrix[$oindex \u2013 1][$nindex \u2013 1] + 1 : 1;\r\n\r\n      if($matrix[$oindex][$nindex] &gt; $maxlen){\r\n        $maxlen = $matrix[$oindex][$nindex];\r\n        $omax = $oindex + 1 \u2013 $maxlen;\r\n        $nmax = $nindex + 1 \u2013 $maxlen;\r\n      }\r\n\r\n    }\r\n\r\n  }\r\n\r\n  if($maxlen == 0) return array(array(\u2018d\u2019=&gt;$old, \u2018i\u2019=&gt;$new));\r\n  \r\n  return array_merge(\r\n    diff(array_slice($old, 0, $omax), array_slice($new, 0, $nmax)),\r\n    array_slice($new, $nmax, $maxlen),\r\n    diff(array_slice($old, $omax + $maxlen), array_slice($new, $nmax + $maxlen)));\r\n\r\n}\r\n\r\nfunction htmlDiff($old, $new, $mode=0){\r\n  $ret = \u201d;\r\n  $diff = diff(preg_split(\u201c\/[s]+\/\u201d, $old), preg_split(\u201c\/[s]+\/\u201d, $new));\r\n  \r\n  foreach($diff as $k){\r\n\r\n    if(is_array($k))\r\n      if($mode == 0){ \/\/\ucd94\uac00\/\uc0ad\uc81c \ubaa8\ub450 \ud45c\uc2dc\r\n        $ret .= (!empty($k[\u2018d\u2019])?\u201d&lt;span class=\u2019deleted\u2019&gt;\u201d.implode(\u2018 \u2018,$k[\u2018d\u2019]).\u201d&lt;\/span&gt; \u201c:\u201d).\r\n        (!empty($k[\u2018i\u2019])?\u201d&lt;span class=\u2019inserted\u2019&gt;\u201d.implode(\u2018 \u2018,$k[\u2018i\u2019]).\u201d&lt;\/span&gt; \u201c:\u201d);\r\n      }else if($mode == 1){ \/\/\uc0ad\uc81c \ub0b4\uc6a9\ub9cc \ud45c\uc2dc\r\n        $ret .= (!empty($k[\u2018d\u2019])?\u201d&lt;span class=\u2019deleted\u2019&gt;\u201d.implode(\u2018 \u2018,$k[\u2018d\u2019]).\u201d&lt;\/span&gt; \u201c:\u201d);\r\n      }else if($mode == 2){ \/\/\ucd94\uac00 \ub0b4\uc6a9\ub9cc \ud45c\uc2dc\r\n        $ret .= (!empty($k[\u2018i\u2019])?\u201d&lt;span class=\u2019inserted\u2019&gt;\u201d.implode(\u2018 \u2018,$k[\u2018i\u2019]).\u201d&lt;\/span&gt; \u201c:\u201d);\r\n      }else $ret .= $k . \u2018 \u2018;\r\n    else $ret .= $k . \u2018 \u2018;\r\n\r\n  }\r\n\r\n  return $ret;\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>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 &nbsp;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[348],"tags":[],"_links":{"self":[{"href":"https:\/\/www.itchefblog.com\/index.php?rest_route=\/wp\/v2\/posts\/535"}],"collection":[{"href":"https:\/\/www.itchefblog.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.itchefblog.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.itchefblog.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.itchefblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=535"}],"version-history":[{"count":3,"href":"https:\/\/www.itchefblog.com\/index.php?rest_route=\/wp\/v2\/posts\/535\/revisions"}],"predecessor-version":[{"id":677,"href":"https:\/\/www.itchefblog.com\/index.php?rest_route=\/wp\/v2\/posts\/535\/revisions\/677"}],"wp:attachment":[{"href":"https:\/\/www.itchefblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=535"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.itchefblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=535"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.itchefblog.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=535"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}