0

Horde_Text_Diff を使用して、2 つの文字列の違いを計算しています。サンプルコードは次のとおりです。

$check_diff = new Horde_Text_Diff( 'auto', array('asdf','asd11') );

$renderer = new Horde_Text_Diff_Renderer_Inline();
echo $renderer->render($check_diff);

これは何もエコーしません。正しい動作は、文字 4 で違いを示すことです。

たとえば、比較配列を array('asdf','asd11') から array('asdf','12345') に変更すると、a1が出力されます。つまり、最初の文字だけを比較しているように見えます。何か案は?

4

1 に答える 1

1

これを試すと、次の 2 つの警告が表示されます。

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

つまり、何かが配列を予期する場所で文字列を取得しています。

これは、2 つの文字列 (を含む配列) を Horde_Text_Diff() に渡すのではなく、2 つの文字列の配列 (各文字列がテキスト行を表す) を (含む配列) を渡す必要があるためです。

現在渡そうとしている実際の文字列に複数行のテキストが含まれている場合は、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
于 2013-09-16T09:03:29.537 に答える