Was ist der einfachste Weg, um den Unterschied zwischen zwei Zeichenfolgen in PHP hervorzuheben?
Ich denke in Anlehnung an die Seite "Stapelüberlauf-Bearbeitungsverlauf", auf der neuer Text grün und entfernter Text rot angezeigt wird. Wenn vorab geschriebene Funktionen oder Klassen verfügbar sind, wäre dies ideal.
Ich habe gerade eine Klasse geschrieben, um die kleinste (nicht wörtlich zu nehmen) Anzahl von Änderungen zu berechnen, um eine Zeichenfolge in eine andere Zeichenfolge umzuwandeln:
http://www.raymondhill.net/finediff/
Es hat eine statische Funktion zum Rendern einer HTML-Version des Diff.
Es ist eine erste Version, die wahrscheinlich verbessert wird, aber sie funktioniert ab sofort einwandfrei. Ich werfe sie also raus, falls jemand ein kompaktes Diff effizient generieren muss, wie ich es brauchte.
Bearbeiten: Es ist jetzt auf Github: https://github.com/gorhill/PHP-FineDiff
quelle
Wenn Sie eine robuste Bibliothek wünschen, sieht Text_Diff (ein PEAR-Paket) ziemlich gut aus. Es hat einige ziemlich coole Funktionen.
quelle
Dies ist eine schöne, auch http://paulbutler.org/archives/a-simple-diff-algorithm-in-php/
quelle
if($matrix[$oindex][$nindex] > $maxlen){
Undefined variable: maxlen
Hier ist eine kurze Funktion, mit der Sie zwei Arrays unterscheiden können. Es implementiert den LCS- Algorithmus:
Es werden zwei Arrays generiert:
Wenn Sie ein Array mit Zeichen füllen, können Sie damit die Inline-Differenz berechnen. Jetzt nur ein einziger Schritt, um die Unterschiede hervorzuheben:
Z.B.:
Wird ausgegeben:
S.
TackOerverfFaulowtZusätzliche Bemerkungen:
quelle
computeDiff is not found
Es gibt auch eine PECL-Erweiterung für xdiff:
Bestimmtes:
Beispiel aus dem PHP-Handbuch:
quelle
Ich hatte schreckliche Probleme mit den PEAR-basierten und den einfacheren Alternativen. Hier ist also eine Lösung, die den Unix-Diff-Befehl nutzt (offensichtlich müssen Sie sich auf einem Unix-System befinden oder über einen funktionierenden Windows-Diff-Befehl verfügen, damit er funktioniert). Wählen Sie Ihr temporäres Lieblingsverzeichnis und ändern Sie die Ausnahmen in Rückkehrcodes, wenn Sie dies bevorzugen.
quelle
Dies ist das beste, das ich gefunden habe.
http://code.stephenmorley.org/php/diff-implementation/
quelle
$sequence1 = $string1; $sequence2 = $string2; $end1 = strlen($string1) - 1; $end2 = strlen($string2) - 1;
mit$sequence1 = preg_split('//u', $string1, -1, PREG_SPLIT_NO_EMPTY); $sequence2 = preg_split('//u', $string2, -1, PREG_SPLIT_NO_EMPTY); $end1 = count($sequence1) - 1; $end2 = count($sequence2) - 1;
Was Sie suchen, ist ein "Diff-Algorithmus". Eine schnelle Google-Suche führte mich zu dieser Lösung . Ich habe es nicht getestet, aber vielleicht macht es das, was Sie brauchen.
quelle
Ein PHP-Port von Neil Frasers diff_match_patch (Apache 2.0 lizenziert)
quelle
Ich würde empfehlen, sich diese fantastischen Funktionen aus dem PHP-Kern anzusehen:
like_text - Berechnet die Ähnlichkeit zwischen zwei Zeichenfolgen
http://www.php.net/manual/en/function.similar-text.php
levenshtein - Berechnet den Levenshtein-Abstand zwischen zwei Saiten
http://www.php.net/manual/en/function.levenshtein.php
Soundex - Berechnet den Soundex-Schlüssel einer Zeichenfolge
http://www.php.net/manual/en/function.soundex.php
Metaphon - Berechnet den Metaphonschlüssel einer Zeichenfolge
http://www.php.net/manual/en/function.metaphone.php
quelle
Ich bin auf diese PHP-Diff-Klasse von Chris Boulton gestoßen, die auf Python-Difflib basiert und eine gute Lösung sein könnte:
PHP Diff Lib
quelle
Eine andere Lösung (zum direkten Vergleich im Gegensatz zu einer einheitlichen Ansicht): https://github.com/danmysak/side-by-side .
quelle