如何获取字符串中与PHP中另一个字符串不匹配的部分?

How to get the part of a string that doesn't match another in PHP?

提问人:user14620645 提问时间:10/2/2022 最后编辑:user14620645 更新时间:10/3/2022 访问量:111

问:

我一直在比较两个不同的字符串,但是我宁愿弄清楚字符串的哪一部分与另一部分不匹配,而不是知道它们有多相似。similar_text

例如:

$str1 = "The cat was happy";
$str2 = "The cat is happy";

custom_function($str1, $str2);

该函数应返回“is”,因为这是唯一不匹配的部分。$str2$str1

有谁知道PHP中可以做到这一点的方法?

谢谢。

PHP 字符串 比较

评论


答:

0赞 Slava Rozhnev 10/2/2022 #1

您可以将字符串拆分为单词,并以以下方式比较结果数组:

function custom_function(string $str1, string $str2) : array {

    $arr1 = explode(' ', $str1);
    $arr2 = explode(' ', $str2);
    
    return array_combine(array_diff($arr1, $arr2), array_diff($arr2, $arr1));
}

PHP代码在线

0赞 markoj 10/2/2022 #2

也许是这样的:

function custom_function(string $str1, string $str2):string{
    $o="";
    $i=0;
    while($str1[$i]===$str2[$i]) $i++;
    $j=strlen($str1)-1;
    $k=strlen($str2)-1;
    while($str1[$j]===$str2[$k]&&$j-->=0&&$k-->=0);
    unset($j);
    while($i<=$k) $o.=$str2[$i++];
    return $o;
}

评论

0赞 user14620645 10/2/2022
我不确定您的代码出了什么问题,但我已经尝试过了,但它无法正常工作
0赞 markoj 10/3/2022
此代码切断了与相同长度的起始部分相同的开始部分和与相同长度的结束部分相同的结束部分。它不会根据 s 分开,因此在您的示例中不起作用。$str2$str1$str2$str1' '
0赞 markoj 10/2/2022 #3

我不确定你到底是什么意思,所以这是另一个潜在的解决方案:

function custom_function(string $str1,string $str2):string{
    $o="";
    $i=0;
    $j=0;
    $l1=strlen($str1);
    $l2=strlen($str2);
    while($i<$l1&&$j<$l2){
        if($str1[$i]===$str2[$j]){
            $i++;
            $j++;
        }else{
            $o.=$str2[$j];
            while($str1[$i]!==$str2[$j]&&$i<$l1) $i++;
        }
    }
    return $o;
}