将2个字符串转换成二进制,比较差异并保存差异


PHP Convert 2 strings into binary, compare the differences and save differences

是否有任何方法/函数来比较两个二进制字符串之间的差异(例如: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 0110010000100000 01101101 01100001 01101110 00100001

PHP是好男人!

比较差异的命令将挑选"are"/"is"answers" man"

和只有这些差异将被重新保存到变量字符串或文件中,如

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] (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的好!

和将被保存的内容将是它们之间的差异,即"are/the"所以它变成了

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]好!

对不起,如果它看起来很乱。我不想使用代码框来防止二进制文件被部分看到,以便于比较

如果我理解正确,你想在两个字符串上有array_diff()行为,那么就把它们爆炸()成数组,之前不需要对它们进行base2(如果源是base2,然后将其转换回来)。

但是从你期望的输出中,你不能单独从array_diff()中得到你想要的。

你需要在array_diff()中使用array_merge()和array_intersect()来返回不同的内容

用户函数:

<?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));
}
?>
示例

<?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()

希望能有所帮助。