php实现diff
PHP 实现 Diff 功能的方法
在 PHP 中实现文件或字符串的差异比较(diff)功能,可以通过内置函数、第三方库或自定义算法完成。以下是几种常见方法:
使用 array_diff 系列函数
PHP 提供了多个数组差异比较函数,适用于简单场景:
array_diff():计算数组的差集(只比较值)array_diff_assoc():计算数组的差集(比较键和值)array_diff_key():计算数组的差集(只比较键)
$array1 = [1, 2, 3, 4];
$array2 = [2, 3, 5];
$diff = array_diff($array1, $array2); // 结果: [1, 4]
使用 xdiff 扩展
PHP 的 xdiff 扩展专门用于文件差异比较,需先安装扩展:
- 安装扩展(Linux):
sudo apt-get install php-xdiff - 使用示例:
$file1 = "old.txt"; $file2 = "new.txt"; $diff = xdiff_file_diff($file1, $file2, 'diff.txt');
使用第三方库 caxy/php-htmldiff
对于 HTML 内容差异比较,推荐使用 Composer 安装专用库:
- 安装:
composer require caxy/php-htmldiff - 示例代码:
use Caxy\HtmlDiff\HtmlDiff; $oldHtml = '<p>Hello world</p>'; $newHtml = '<p>Hi world</p>'; $diff = new HtmlDiff($oldHtml, $newHtml); echo $diff->build();
自定义实现(基于 LCS 算法)
对于字符串差异,可手动实现最长公共子序列(LCS)算法:

function computeDiff($old, $new) {
$matrix = [];
$maxlen = 0;
for ($i = 0; $i < strlen($old); $i++) {
for ($j = 0; $j < strlen($new); $j++) {
if ($old[$i] == $new[$j]) {
$matrix[$i][$j] = ($i > 0 && $j > 0) ? $matrix[$i-1][$j-1] + 1 : 1;
if ($matrix[$i][$j] > $maxlen) {
$maxlen = $matrix[$i][$j];
}
} else {
$matrix[$i][$j] = 0;
}
}
}
return $maxlen;
}
选择建议
- 简单数组比较:使用
array_diff系列函数 - 文件差异:优先使用
xdiff扩展 - HTML 内容差异:选择
php-htmldiff等专用库 - 自定义需求:根据场景实现算法(如 LCS)






