我想检查给定的2个字符的值(我的输入:$string
)是否存在于我的两个单独列表中,并且可能匹配:
一个列表是动态的(将从我的数据库中读取),列表中的值用逗号分隔,每个逗号后都有空格:
例如:
$dynamic_list="AA, AB, BA"
$dynamic_list="BC"
$dynamic_list="" (Empty)
第二个列表是我自己维护的静态列表,应该在脚本本身内。
我不确定如何构建它。也许只需定义一个变量即可:
$static_list="MC,JL,EO";
如果该字符串与这些列表中任何一个的字符串匹配,我只想输出该字符串,否则输出“不匹配”。
什么是最快,最快的方法?
答案 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";