Изменение текста PHP/JS

Во-первых, это точный дубликат этих четырех вопросов:

Кажется, что времена изменились, так как эти вопросы были заданы впервые, и мне интересно, что сегодня представляет собой хороший инструмент для такого сравнения? Я рассмотрел (дополнительно к этим вопросам):

Но все те, что я получаю, сейчас либо не готовы, либо кажутся немного изворотливыми, потому что они не используются так много (и некоторые даже намекают, что они не очень эффективны), и PEAR меня беспокоит. Мне неинтересно устанавливать PEAR для одного небольшого модуля не только, но, похоже, бросать кирпич через мое собственное окно, чтобы установить его для такого небольшого модуля по сравнению с PEAR в целом не только это, но и модуль был заменен и помещен на другой канал (не знаю почему?). Я бы использовал версию PEAR, если это мой единственный выбор, но я хочу использовать пакет upto date.

Кто-нибудь знает о хорошо используемой и в настоящее время поддерживаемой или встроенной функции (даже если это расширение PHP) text diff для PHP и/или JavaScript (JQuery также)?

Ответ 1

Итак, это было какое-то время.

Я действительно решил посмотреть, что другие люди используют и наткнулись на то, что использует Yii (http://www.yiiframework.com).

Они фактически используют модуль PEAR для своих text_diff, и они используют его в своей новой форме на канале орды. Похоже, что text_diff теперь является проектом орды, но вы можете так же легко интегрировать его версию в свое приложение, и это то, что по умолчанию делает Yii (он поставляется вместе с версией).

Итак, я немного искал, чтобы узнать, как они его использовали, и как попасть в него, и я наткнулся на:

public function actionDiff()
{
    Yii::import('gii.components.TextDiff');

    $model=$this->prepare();
    if(isset($_GET['id']) && isset($model->files[$_GET['id']]))
    {
        $file=$model->files[$_GET['id']];
        if(!in_array($file->type,array('php', 'txt','js','css')))
            $diff=false;
        elseif($file->operation===CCodeFile::OP_OVERWRITE)
            $diff=TextDiff::compare(file_get_contents($file->path), $file->content);
        else
            $diff='';

        $this->renderPartial('/common/diff',array(
            'file'=>$file,
            'diff'=>$diff,
        ));
    }
    else
        throw new CHttpException(404,'Unable to find the code you requested.');
}

В CCodeGenerator для своего модуля Gii (http://www.yiiframework.com/doc/api/1.1/CCodeGenerator/). Важная часть - это то, где они фактически подключаются к модулю PEAR:

$diff=TextDiff::compare(file_get_contents($file->path), $file->content);

Прочитав содержимое двух файлов, которые выдает вывод diffed.

Первоначально я не хотел использовать PEAR из-за раздувания, но этот модуль довольно тонкий для полнофункционального text_diff, поэтому я решил пойти с этим. Не только это, но на данный момент это единственный модуль text_diff, который действительно работал у меня, поэтому я поддерживаю все лучшее, даже если лучше всего голодны.

Ответ 2

Вы пробовали один из двух решений Philippe на этой теме?

Цитируется здесь:

В PHP. array_diff сравнивает первый с вторым массивом и возвращает разницу.

$a1 = str_split('abcdefghijklmnop');
$a2 = str_split('abcdefghi');
echo join('', array_diff($a1, $a2)); // jklmnop

Это также будет работать:

$s1 = 'abcdefghijklmnop';
$s2 = 'abcdefghi';
echo str_replace(str_split($s2), '', $s1); // jklmnop

Это может обрабатывать $s2 = 'ghiabcdef';, а потому, что str_replace()массив, а не строку.