检查两个字符串列表中是否存在字符串(以逗号分隔)

时间:2019-07-03 12:06:06

标签: php string comparison

我想检查给定的2个字符的值(我的输入:$string)是否存在于我的两个单独列表中,并且可能匹配:

一个列表是动态的(将从我的数据库中读取),列表中的值用逗号分隔,每个逗号后都有空格:

例如:

$dynamic_list="AA, AB, BA"
$dynamic_list="BC"
$dynamic_list="" (Empty)

第二个列表是我自己维护的静态列表,应该在脚本本身内。

我不确定如何构建它。也许只需定义一个变量即可:

$static_list="MC,JL,EO";

如果该字符串与这些列表中任何一个的字符串匹配,我只想输出该字符串,否则输出“不匹配”。

什么是最快,最快的方法?

3 个答案:

答案 0 :(得分:2)

使用字符串使用的相同定界符将两个字符串连接起来,并进行正常检查。

执行附加字符串或数组操作是不必要的开销。

代码:(Demo

$dynamic_list = "AA, AB, BA";
$static_list = "MC,JL,EO";

$search = "JL";

if (strpos($dynamic_list . ',' . $static_list, $search) !== false) {
    echo 'found';
} else {
    echo 'not found';
}

但是,实际上,您应该首先检查静态字符串。然后,如果您在静态字符串中没有匹配项,那么只需麻烦一下数据库。

对于查询,您可以计算LOCATE()在其中找到搜索字符串的行数-由于不需要数据,只需确认匹配即可。

答案 1 :(得分:1)

实现此目的的一种简单方法不是将其拆分为数组,而是进行检查,首先要确保字符串以与分隔符相同的字符结尾,并使用分隔符在字符串中搜索所需项。为了提高搜索的准确性,最好在字符串前加上分隔符,并在要搜索的字符串前加上前缀。

因此,在第一个示例中,将AA, AB, BA改成, AA, AB, BA,,然后在该示例中搜索, BA, ...

$dynamic_list="AA, AB, BA";
$static_list="MC,JL,EO";
$to_find = "BA";

if ( strpos(", ".$dynamic_list.", ", ", ".$to_find.", ") !== false
        || strpos(",".$static_list.",", ",".$to_find.",") !== false)    {
    echo $to_find.PHP_EOL;    
}
else    {
    echo "Not found";
}

由于两个字符串具有不同的分隔符,因此会略有不同,但是如果您使用相同的分隔符,并且可以将其组合为1个搜索,那应该很容易...

$dynamic_list="AA, AB, BA";
$static_list="MC, JL, EO";
$to_find = "BA";
$separator = ", ";
if ( strpos($separator.$dynamic_list.$separator.$static_list.$separator
        , $separator.$to_find.$separator) !== false)    {
    echo $to_find.PHP_EOL;    
}
else    {
    echo "Not found";
}

答案 2 :(得分:0)

使用 in_array 搜索数组内部

$dynamic_list="AA, AB, BA";
$dynamic_list_array=explode(", ", $dynamic_list);

$static_list="MC,JL,EO";
$static_list_array=explode(",", $static_list);

$tofind="DD";

if(in_array($tofind, $dynamic_list_array) || in_array($tofind, $static_list_array))
    echo "found";
else
    echo"not found";