skip to Main Content

I’ve been using similar_text to compare two different strings, however instead of knowing how similar they are, I’d rather figure out exactly which part of the string doesn’t match the other.

For example:

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

custom_function($str1, $str2);

The function should return "is", since that is the only part of $str2 that doesn’t match $str1.

Does anyone know of a way in PHP to do this?

Thanks.

3

Answers


  1. You can split the strings into words and compare resulting arrays in next way:

    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 code online

    Login or Signup to reply.
  2. Maybe this:

    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;
    }
    
    Login or Signup to reply.
  3. I am not sure what exactly did you mean, so this is another potential solution:

    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;
    }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search