2

PHPを使用して、それぞれサイズが50Kbの2つの大きな文字列を比較するにはどうすればよいですか。差別化要素を強調したいと思います。

4

3 に答える 3

4

2つの文字列の違いは、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か?

おそらくこれはあなたが望むものです

追加した:

または、異なるすべての文字を強調表示する場合は、次のような 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 に答える