FEATURE: change directory structure
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
namespace App\CMS\Helpers;
|
||||
|
||||
/*
|
||||
Paul's Simple Differ Algorithm v 0.1
|
||||
(C) Paul Butler 2007 <http://www.paulbutler.org/>
|
||||
May be used and distributed under the zlib/libpng license.
|
||||
|
||||
This code is intended for learning purposes; it was written with short
|
||||
code taking priority over performance. It could be used in a practical
|
||||
application, but there are a few ways it could be optimized.
|
||||
|
||||
Given two arrays, the function diff will return an array of the changes.
|
||||
I won't describe the format of the array, but it will be obvious
|
||||
if you use print_r() on the result of a diff on some test data.
|
||||
|
||||
htmlDiff is a wrapper for the diff command, it takes two strings and
|
||||
returns the differences in HTML. The tags used are <ins> and <del>,
|
||||
which can easily be styled with CSS.
|
||||
|
||||
@url https://github.com/paulgb/simplediff/blob/master/php/simplediff.php
|
||||
|
||||
Sorry for this kind of magic, I have no idea how this works.. :(
|
||||
*/
|
||||
|
||||
class Differ
|
||||
{
|
||||
public static function diff($old, $new)
|
||||
{
|
||||
$matrix = [];
|
||||
$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 [['d' => $old, 'i' => $new]];
|
||||
}
|
||||
|
||||
return array_merge(self::diff(array_slice($old, 0, $omax), array_slice($new, 0, $nmax)), array_slice($new, $nmax, $maxlen), self::diff(array_slice($old, $omax + $maxlen), array_slice($new, $nmax + $maxlen)));
|
||||
}
|
||||
|
||||
public static function htmlDiff($old, $new)
|
||||
{
|
||||
$ret = '';
|
||||
$diff = self::diff(preg_split("/[\s]+/", $old), preg_split("/[\s]+/", $new));
|
||||
foreach ($diff as $k) {
|
||||
if (is_array($k)) {
|
||||
$ret .= (!empty($k['d']) ? "<del>" . implode(' ', $k['d']) . "</del> " : '') . (!empty($k['i']) ? "<ins>" . implode(' ', $k['i']) . "</ins> " : '');
|
||||
} else {
|
||||
$ret .= $k . ' ';
|
||||
}
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user