本文整理汇总了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();
}