PHP - получить отчет о разнице с позициями вставок в текст - PullRequest
2 голосов
/ 24 марта 2012

Мне известно, что существует много текстовых различий для PHP, но я не смог найти тот, который возвращает вставки позиций, где они были сделаны.

* 1003 Е.Г. *

Before: This is a apple

After: This is an apple

'Insertion of a at 8'

. * Я думаю, что это 8 *

Итак, этот дифференциал должен происходить на уровне персонажа. Я должен быть в состоянии, из возвращаемых результатов воспроизвести текст «После» из текста «До».

Есть мысли? Заранее спасибо,

1 Ответ

0 голосов
/ 27 марта 2012

Я потратил некоторое время и пришел к отправной точке для вас:

function string_compare($string1, $string2) {
        $chars1 = str_split($string1);
        $chars2 = str_split($string2);

        $longer = strlen($string1) > strlen($string2) ? $chars1 : $chars2;
        $shorter = strlen($string1) > strlen($string2) ? $chars2 : $chars1;

        $key_offset = 0;
        $changes = array();

        foreach($longer as $key => $char) {
            #$key2 = $key + $key_offset;
            $char2 = isset($shorter[$key]) ? $shorter[$key] : '';

            if($char !== $char2) {
                if(empty($char2)) {
                    $changes[$key] = array('remove' => $char);
                } elseif(empty($char)) {
                    $changes[$key] = array('add' => $char);
                } else {
                    $changes[$key] = array('change' => $char.' to '.$char2);
                }
            }
        }

        return $changes;
    }

Единственным недостатком является то, что он возвращает изменения в том, как получить более длинную строку в более короткую.


Эта функция задыхается, не используйте ее, извините.

...