PHP比较字符串并返回共同的值

4

我尝试查找其他帖子/信息,但似乎都不起作用 - 尽管我相信这是一个简单的任务。

我有两个字符串,我想要一些代码行来给我它们共同拥有的单词。

例如,我可能有...

String1 = "Product Name - Blue";
String2 = "Blue Green Pink Black Orange";

我想要一个只包含值“Blue”的字符串。我该怎么做?谢谢!

3个回答

12
你可以使用explodearray_intersect,也许可以吗? 这里有个演示 & 这里
<?php
 
  function common($str1,$str2,$case_sensitive = false)
  {
    $ary1 = explode(' ',$str1);
    $ary2 = explode(' ',$str2);

    if ($case_sensitive)
    {
      $ary1 = array_map('strtolower',$ary1);
      $ary2 = array_map('strtolower',$ary2);
    }

    return implode(' ',array_intersect($ary1,$ary2));
  }
 
  echo common('Product Name - Blue','Blue Green Pink Black Orange');

返回“蓝色”;
编辑:更新了一个不区分大小写的版本,如果你喜欢的话。

1
我在想这个问题,但如果“blue”的两个实例都必须以大写字母B开头,那么这种方法是否可行?听起来他可能需要创建自己的函数来模拟array_intersect,不区分大小写。编辑:看来你已经注意到了这一点,做得好。 - Crashspeeder
是的,小写字母附加功能很有用。您知道是否有一种方法可以添加检查单词段的能力吗?例如:与“蓝色”不同,匹配类似于“紫色猫头鹰”的东西? - Nathaniel Wendt
@thepristinedesign:你能给出两个字符串的例子和期望的结果吗? - Brad Christie
@theprestinedesign:第二个字符串总是CSV吗? - Brad Christie
实际上它也是作为一个数组开始的,但为了简单起见,我将其列为CSV字符串。我假设我总是可以将该数组分解为像我在string2中给出的示例那样的CSV字符串。 - Nathaniel Wendt
显示剩余2条评论

3
一个解决方案是将您的字符串拆分成两个单词数组,例如使用 explode() 函数:
$string1 = "Product Name - Blue";
$string2 = "Blue Green Pink Black Orange";

$arr1 = explode(' ', $string1);
$arr2 = explode(' ', $string2);

请注意,explode()是一种基本方法;您可能需要使用更复杂的解决方案,例如preg_split(),它允许更具体的分隔符。
然后,在这些数组上使用array_intersect(),以找出两者中都存在的单词。
$common = array_intersect($arr1, $arr2);
var_dump($common);

在这种情况下,会得到以下结果:
array
  3 => string 'Blue' (length=4)

0
你想对每个列表执行explode()函数将它们分离成数组,然后使用array_intersect()函数来查找两个数组中的共同单词。

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