是否有任何方法/函数来比较2个二进制字符串之间的差异(例如,1来自变量字符串,1来自文件),只将这些差异重新保存回变量字符串或文件中?
例如
01010000 01001000 01010000 00100000 01100001 01110010 01100101 00100000 01100111 01101111 01101111 01100100 00100001
PHP很好!
和
01010000 01001000 01010000 00100000 01101001 01110011 00100000 01100111 01101111 01101111 01100100 00100000 01101101 01100001 01101110 00100001
PHP是好人!
用于比较差异的命令将被提取"" /"是"和"人"
并且只有这些差异将被重新保存到变量字符串或文件中,如此
01010000 01001000 01010000 00100000 [del] 01100001 01110010 01100101 [/ del] [ins] 01101001 01110011 [/ ins] 00100000 01100111 01101111 01101111 01100100 [ins] 00100000 01101101 01100001 01101110 [/ ins] 00100001
PHP [del]是[/ del] [ins]是[/ ins]好[ins] man [/ ins]!
另一个例子:
01010000 01001000 01010000 00100000 01100001 01110010 01100101 00100000 01100111 01101111 01101111 01100100 00100001
PHP很好!
01010000 01001000 01010000 00100000 01110100 01101000 01100101 00100000 01100111 01101111 01101111 01100100 00100001
PHP好!
将保存的将是他们之间的差异,这是"是/" 所以它变成
01010000 01001000 01010000 00100000 [del] 01100001 01110010 01100101 [del] [ins] 01110100 01101000 01100101 [/ ins] 00100000 01100111 01101111 01101111 01100100 00100001
PHP [del]是[/ del] [ins] [/ ins]好!
抱歉,如果看起来很乱。我不想使用代码框来防止二进制文件被部分看到并且更容易比较
答案 0 :(得分:1)
如果我正确理解,你想在两个字符串上有array_diff()行为,那么只需explode()将它们放入数组中,之前不需要base2它们(如果源是base2那么将其转换回来)。
但是根据你的预期输出,你不会单独从array_diff()得到你想要的东西。
您需要在array_merge()中使用array_intersect()和array_diff()来返回不同的内容。
以下是用户功能:
<?php
function str_diff($stringA='', $stringB='')
{
$arrayA = explode(' ', $stringA);
$arrayB = explode(' ', $stringB);
//What I think you want
return array_diff(
array_merge($arrayA, $arrayB),
array_intersect($arrayA, $arrayB)
);
//There's also this, but A has priority over B
//return array_diff($arrayA, $arrayB);
//And this returns just all unique, not compared
//return array_unique(array_merge($arrayA, $arrayB));
}
?>
示例A
<?php
$strA = "PHP are good!";
$strB = "PHP is good man!";
$diff = str_diff($strA, $strB);
/*
Array
(
[1] => are
[2] => good!
[4] => is
[5] => good
[6] => man!
)
*/
echo '<pre>'.print_r($diff, true).'</pre>';
//are good! is good man!
echo implode(' ', $diff);
?>
示例B
<?php
$strA = "PHP are good!";
$strB = "PHP the good!";
$diff = str_diff($strA, $strB);
/*
Array
(
[1] => are
[4] => the
)
*/
echo '<pre>'.print_r($diff, true).'</pre>';
//are the
echo implode(' ', $diff);
?>
保存字符串将是对file_put_contents()
的一个简单调用希望它有所帮助。