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

PHP将2个字符串转换为二进制,比较差异并保存差异,php,binary,string-comparison,Php,Binary,String Comparison,是否有任何方法/功能来比较两个二进制字符串之间的差异(例如,变量字符串中的1和文件中的1),并且只将这些差异重新保存回变量字符串或文件 例如 01010000 01001000 01010000 0010000001100001 011110010 011001100101 00100000011011011011111 011011111 01100110010000100001 PHP很好 及 01010000 01001000 01010000 00100000011010001 0111

是否有任何方法/功能来比较两个二进制字符串之间的差异(例如,变量字符串中的1和文件中的1),并且只将这些差异重新保存回变量字符串或文件

例如

01010000 01001000 01010000 0010000001100001 011110010 011001100101 00100000011011011011111 011011111 01100110010000100001

PHP很好

01010000 01001000 01010000 00100000011010001 011110011 00100000011011011111 011011111 011011111 0110011110110011000010000001101101101100001 011001101110 00100001

PHP是个好人

比较差异的命令将选择“are”/“is”和“man”

只有这些差异才会重新保存到变量字符串或类似的文件中

01010000 01001000 01010000 00100000[del]011000011110010 011001001[/del][ins]011001001011110011[/ins]00100000011011011111 011001001001[ins]0010000001101101101101101101101][ins]00100001

PHP[del]是[/del][ins]是[/ins]好人[/ins]

另一个例子:

01010000 01001000 01010000 0010000001100001 011110010 011001100101 00100000011011011011111 011011111 01100110010000100001

PHP很好

01010000 01001000 01010000 00100000011110100 011010000 011001100101 00100000011011011011111 011011111 01100110010000100001

好的

将保存的是它们之间的差异,即“是/是” 所以它变成了

01010000 01001000 01010000 00100000[del]011000011110010 01100100101[del][ins]01110100 011010000 01100100101[/ins]00100000011001011011011111 011011111 01101101100100100001

PHP[del]是[/del][ins]好的


如果看起来很乱,很抱歉。我不想使用代码盒来防止二进制文件被部分看到,并且为了便于比较

如果我理解正确,您希望在两个字符串上有行为,好的,然后将它们放入一个数组中,之前不需要将它们base2(如果源是base2,则将其转换回)

但是,从你的预期产出中,你无法单独得到你想要的

您需要使用和输入以返回不同的内容

以下是用户功能:

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

我不同意你的观点。Similor_text只计算相似度,引用您的源代码“返回两个字符串中匹配字符的数量”。levenstein只计算更改的总数,但不返回给您。strcmp()的工作方式与相似文本和levenstein的结合方式类似。我要寻找的是可以返回和保存的差异,类似于php中的array_diff,但可以保存字符串,这些差异可以保存。可以使用strcmp(),但它仍然不能回答如何将差异保存到变量字符串或文件中并删除差异的问题。way to go@Loz Cheroneツ, 没有任何理由的否决,只是删除你的评论,让我看起来像是在跟自己说话,我不会否决。请看+1,我的评论也是错误的,我想回答。谢谢你的洞察力。首先,我想为误解道歉。我希望你能原谅我。无论如何,将其转换为base2是为了获得更好的准确性,因为您给出的方法考虑了使用空格拆分的字符。但是如果你有像“abcdefghi”和“abcdetghi”这样的东西会发生什么呢?
<?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);
?>
<?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);
?>