【问题标题】:Partially matching strings部分匹配的字符串
【发布时间】:2019-10-18 05:39:55
【问题描述】:

我有两个string 类型的变量,结构如下:

echo $var_1;
"words" : [ "word A", "word B", "word C", "word D" ],

echo $var_2;
"words" : [ "word B", "word D", "word G", ],

字符串可以包含任意数量的单词,并且单词的结构没有规则。我要做的是根据两个变量之间是否存在一个或多个完全匹配的单词来编写条件语句。在上面的示例中,有两个匹配项:"word B""word D"。我追求的是这些方面的东西:

if ($matches > 0) {//some code}

关于如何定义$matches 有什么想法吗?

【问题讨论】:

  • 这些是来自 json 的值吗?如果是 - 将它们解码为数组并执行array_intersect.
  • 如果变量的类型是字符串,如果它们是从 json 获得的,或者我可以假装它是 json,这有关系吗?
  • 字符串从何而来?它们看起来完全一样吗?那么它也不是有效的json。如果你可以解析字符串,给你一个单词数组,那将很容易解决。但由于它似乎是一些自定义(不一致)格式,所以会比较棘手。如果你可以控制字符串的格式,我会从那里开始。
  • @MagnusEriksson 它们来自更大的 json。我所做的只是它的两个子集,例如$var_1 = $json_1[2];。然后上面是我运行echo $var_1;时得到的。
  • 我不知道$json_1[2] 会给你什么,因为我不知道$json_1 包含什么。但是,您在问题中发布的字符串不是有效的 json。 $json_1 是否包含正确的数据数组或是否包含字符串化的 json?它来自哪里?

标签: php string-matching


【解决方案1】:

你可以用类似这样的代码来匹配这些元素

$v1 = array( "word A", "word B", "word C", "word D" );
$v2 = array( "word B", "word D", "word G");

echo json_encode($v1);
echo json_encode($v2);

foreach($v1 as $va)
{
    foreach($v2 as $vb)
    {
        if(strpos($va,$vb) !== false)
        {
            echo "Matched".$va;
        }
    }
}

【讨论】:

  • 谢谢!但我认为这并不是我真正想要的,因为我在现实中有很多变量要匹配。手动定义每个数组并不是一个真正的选择。
  • 那么,既然 OP 将它们作为字符串而不是数组来获取,您如何将单词作为数组开始?
  • 但是您在问题中显示的变量..不是字符串,也不是正确的 json,我只是在展示如何匹配字符串或元素的示例
猜你喜欢
  • 2012-06-15
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-01
  • 1970-01-01
  • 2017-04-02
相关资源
最近更新 更多