本文整理匯總了PHP中Diff::setChanges方法的典型用法代碼示例。如果您正苦於以下問題:PHP Diff::setChanges方法的具體用法?PHP Diff::setChanges怎麽用?PHP Diff::setChanges使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類Diff
的用法示例。
在下文中一共展示了Diff::setChanges方法的3個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的PHP代碼示例。
示例1: testLevenshtein
public function testLevenshtein()
{
// Levenshtein with trailing equality.
$this->d->setChanges(array(array(Diff::DELETE, "abc"), array(Diff::INSERT, "1234"), array(Diff::EQUAL, "xyz")));
$this->assertEquals(4, $this->d->levenshtein());
// Levenshtein with leading equality.
$this->d->setChanges(array(array(Diff::EQUAL, "xyz"), array(Diff::DELETE, "abc"), array(Diff::INSERT, "1234")));
$this->assertEquals(4, $this->d->levenshtein());
// Levenshtein with middle equality.
$this->d->setChanges(array(array(Diff::DELETE, "abc"), array(Diff::EQUAL, "xyz"), array(Diff::INSERT, "1234")));
$this->assertEquals(7, $this->d->levenshtein());
}
示例2: lineMode
/**
* Do a quick line-level diff on both strings, then rediff the parts for greater accuracy.
* This speedup can produce non-minimal diffs.
*
* @param string $text1 Old string to be diffed.
* @param string $text2 New string to be diffed.
* @param int $deadline Time when the diff should be complete by.
*
* @return array Array of changes.
*/
protected function lineMode($text1, $text2, $deadline)
{
// Scan the text on a line-by-line basis first.
list($text1, $text2, $lineArray) = $this->getToolkit()->linesToChars($text1, $text2);
$diff = new Diff();
$diff->main($text1, $text2, false, $deadline);
$diffs = $diff->getChanges();
// Convert the diff back to original text.
$this->getToolkit()->charsToLines($diffs, $lineArray);
$diff->setChanges($diffs);
// Eliminate freak matches (e.g. blank lines)
$diff->cleanupSemantic();
$diffs = $diff->getChanges();
// Rediff any replacement blocks, this time character-by-character.
// Add a dummy entry at the end.
array_push($diffs, array(self::EQUAL, ''));
$pointer = 0;
$countDelete = 0;
$countInsert = 0;
$textDelete = '';
$textInsert = '';
while ($pointer < count($diffs)) {
switch ($diffs[$pointer][0]) {
case self::DELETE:
$countDelete++;
$textDelete .= $diffs[$pointer][1];
break;
case self::INSERT:
$countInsert++;
$textInsert .= $diffs[$pointer][1];
break;
case self::EQUAL:
// Upon reaching an equality, check for prior redundancies.
if ($countDelete > 0 && $countInsert > 0) {
// Delete the offending records and add the merged ones.
$subDiff = new Diff();
$subDiff->main($textDelete, $textInsert, false, $deadline);
array_splice($diffs, $pointer - $countDelete - $countInsert, $countDelete + $countInsert, $subDiff->getChanges());
$pointer = $pointer - $countDelete - $countInsert + count($subDiff->getChanges());
}
$countDelete = 0;
$countInsert = 0;
$textDelete = '';
$textInsert = '';
break;
}
$pointer++;
}
// Remove the dummy entry at the end.
array_pop($diffs);
return $diffs;
}
示例3: diff_prettyHtml
/**
* Convert a diff array into a pretty HTML report.
*
* @param array $diffs Array of diff arrays.
*
* @return string HTML representation.
*/
public function diff_prettyHtml($diffs)
{
$this->diff->setChanges($diffs);
return $this->diff->prettyHtml();
}