如何使用 php.ini 比较两个大小为 50Kb 的大字符串。我想强调差异化位。
问问题
3916 次
3 回答
4
也可以使用 XOR 找到两个字符串之间的差异:
$s = 'the sky is falling';
$t = 'the pie is failing';
$d = $s ^ $t;
echo $s, "\n";
for ($i = 0, $n = strlen($d); $i != $n; ++$i) {
echo $d[$i] === "\0" ? ' ' : '#';
}
echo "\n$t\n";
输出:
the sky is falling
### #
the pie is failing
XOR 操作将产生一个字符串,'\0'
其中两个字符串相同,'\0'
如果它们不同,则不是。它不会比仅逐个字符地比较两个字符串更快,但如果您只想知道使用strspn()
.
于 2012-06-22T07:10:46.843 回答
3
你想像这样输出diff
吗?
也许这就是你想要的https://github.com/paulgb/simplediff/blob/5bfe1d2a8f967c7901ace50f04ac2d9308ed3169/simplediff.php
添加:
或者,如果您想突出显示每个不同的字符,您可以使用这样的 PHP 脚本:
for($i=0;$i<strlen($string1);$i++){
if($string1[$i]!=$string2[$i]){
echo "Char $i is different ({$string1[$i]}!={$string2[$i]}<br />\n";
}
}
如果您能详细告诉我们您想如何比较,或者给我们一些例子,我们会更容易确定答案。
于 2012-06-22T06:40:03.353 回答
0
对@Alvin 的脚本稍作修改:
我在本地服务器上使用 50kb lorem ipsum 字符串对其进行了测试,我将所有“a”替换为“4”并突出显示它们。它运行得非常快
<?php
$string1 = "This is a sample text to test a script to highlight the differences between 2 strings, so the second string will be slightly different";
$string2 = "This is 2 s4mple text to test a scr1pt to highlight the differences between 2 strings, so the first string will be slightly different";
for($i=0;$i<strlen($string1);$i++){
if($string1[$i]!=$string2[$i]){
$string3[$i] = "<mark>{$string1[$i]}</mark>";
$string4[$i] = "<mark>{$string2[$i]}</mark>";
}
else {
$string3[$i] = "{$string1[$i]}";
$string4[$i] = "{$string2[$i]}";
}
}
$string3 = implode("",$string3);
$string4 = implode("",$string4);
echo "$string3". "<br />". $string4;
?>
于 2012-06-22T07:17:48.077 回答