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

时间:2014-07-19 09:11:00

标签: php binary string-comparison

是否有任何方法/函数来比较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]好!

抱歉,如果看起来很乱。我不想使用代码框来防止二进制文件被部分看到并且更容易比较

1 个答案:

答案 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()

的一个简单调用

希望它有所帮助。