Библиотека сравнения строк Horde_Text_Diff, сравнивающая только 1-й символ строки
Я использую Horde_Text_Diff, чтобы вычислить разницу между двумя строками. Пример кода выглядит следующим образом:
$check_diff = new Horde_Text_Diff( 'auto', array('asdf','asd11') );
$renderer = new Horde_Text_Diff_Renderer_Inline();
echo $renderer->render($check_diff);
Это ничего не повторяет. Правильное поведение будет показывать разницу в символе 4.
Если я изменю массив сравнения с массива ("asdf", "asd11") на, например, массив ("asdf", "12345"), то он выведет a1. Другими словами, кажется, что сравнивается только первый символ. Есть идеи?
1 ответ
Когда я пытаюсь это сделать, я получаю два предупреждения:
PHP Warning: array_walk() expects parameter 1 to be array, string given in /usr/share/php/Horde/Text/Diff/Engine/Native.php on line 33
PHP Warning: array_walk() expects parameter 1 to be array, string given in /usr/share/php/Horde/Text/Diff/Engine/Native.php on line 34
То есть что-то получает строки, где оно ожидает массивы.
Это потому, что вместо передачи (массива, содержащего) двух строк в Horde_Text_Diff(), вы должны передать (массив, содержащий) два массива строк (где каждая строка представляет строку текста).
Если фактические строки, которые вы в настоящее время пытаетесь передать, содержат несколько строк текста, то вы можете разбить их на массивы строк с помощью explode (), например:
$a = "foo\nbar\nbaz";
$b = "foo\nqux\nbaz";
$a_lines = explode("\n", $a);
$b_lines = explode("\n", $b);
$check_diff = new Horde_Text_Diff( 'auto', array($a_lines, $b_lines) );
$renderer = new Horde_Text_Diff_Renderer_Inline();
echo $renderer->render($check_diff);
какие выводы:
foo
<del>bar</del><ins>qux</ins>
baz