检查四个字符字符串中两个或多个字符相等的简单方法?

3

我需要比较两个字符串,例如INTUIXTE,并检查是否有两个或更多字符相同。对于上述两个字符串,我希望返回true,因为I和T相同。

字符串中字母的顺序最终无关紧要,因为每个字符不能出现在字符串的不同位置。看起来应该有一种简单的方法来做到这一点。

3个回答

8

看一下similar_text()函数。下面的代码没有经过测试,但我认为它可以按照您的要求工作。

$a = "INTU";
$b = "IXTE";

$is_match = ( similar_text($a , $b) >= 2) ;

这是一个不错的解决方案,尽管我认为 $is_match = ( similar_text($a , $b) >= 0.5); 可能是正确的,因为 similar_text 似乎返回一个百分比。 - rapidash
如果您仅传递第三个参数,则它将返回百分比。根据手册,“通过将引用作为第三个参数传递,similar_text()将为您计算相似度百分比。它返回两个字符串中匹配字符的数量。” - Sabeen Malik

1
你可以使用 PHP 的 array_intersect() 函数,它会返回所有的交集。所以如果返回的结果大于 2,就返回 true。
但是它不接受字符串元素作为输入,所以你需要将要比较的字符串转换成字符数组。

Manual: http://php.net/manual/de/function.array-intersect.php


这个方法很好用,但是strings不是字符的array。有没有办法将它们视为这样的数组以便与此函数一起使用? - rapidash
您可以使用 $string[0] 简单地访问字符串的单个字符,以便循环并获取所有单个字符。如果 foreach 无法正常工作,请使用 strlen 进行正确的循环。 - nohero
忘了提一下:顶部的解决方案看起来更好,所以如果您想知道哪些元素匹配,那么只能使用这种方式。 - nohero
我最初是这样写的:count(array_intersect(str_split($a), str_split($b))) >= 2),但现在我知道了上面提到的方法,所以会进行修改。 - rapidash

0
function compare_strings($str1, $str2)
{
  $count=0;
  $compare[] = substr($str1, 0, 1);
  $compare[] = substr($str1, 1, 1);
  $compare[] = substr($str1, 2, 1);
  $compare[] = substr($str1, 3, 1);

  foreach($compare as $string)
  {
    if(strstr($str2, $string)) { $count++; }
  } 

  if($count>1) 
  {
    return TRUE;
  }else{
    return FALSE;
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接