如何解决PHP如何测试字符串的值是否存在部分在字符串中?
| 必须简单但找不到我的答案。 如何测试字符串中是否包含数组中的值之一? 输出应为true或false。$array = Array(
0 => \'word1\',1 => \'word2\',2 => \'New York\'
3 => \'New car\'
);
$string = \"Its a sunny day in New York\";
试图澄清。在这种情况下,array [3]不应该匹配。仅应使用array [2]。
解决方法
更新:
单词边界无关的解决方案是在输入字符串和搜索词之间添加空格:
$str = \' \' . $str . \' \';
function quote($a) {
return \' \' . preg_quote($a,\'/\') . \' \';
}
$word_pattern = \'/\' . implode(\'|\',array_map(\'quote\',$array)) . \'/\';
if(preg_match($word_pattern,$str) > 0) {
}
或遍历以下条款:
foreach($array as $term) {
if (strpos($str,\' \'. $term . \' \') !== false) {
// word contained
}
}
两者都可以放入简化使用的功能中,例如
function contains($needle,$haystack) {
$haystack = \' \' . $haystack . \' \';
foreach($needle as $term) {
if(strpos($haystack,\' \' . $term . \' \') !== false) {
return true;
}
}
return false;
}
看看一个演示
旧答案:
您可以使用正则表达式:
function quote($a) {
return preg_quote($a,\'/\');
}
$word_pattern = implode(\'|\',$array));
if(preg_match(\'/\\b\' . $word_pattern . \'\\b/\',$str) > 0) {
}
重要的是此处的边界字符“ 5”。仅当您搜索的值是字符串中的一个(或多个)单词时,您才会获得匹配项。
, in_array
的功能替代品为:
array_filter(
array_map(\"strpos\",array_fill(0,count($words),$string),$words),\"is_int\")
, 蛮力方法是:
$words = implode(\'|\',$array);
if (preg_match(\"/($words)/\",$string,$matches)) {
echo \"found $matches[1]\";
}
, $array = Array(
0 => \'word1\',1 => \'word2\',2 => \'word3\'
);
$string = \"there a good word3 here\";
foreach($array as $word)
{
if(strstr($string,$word))
echo \"<b>$word</b> has been detected in <b>$string</b>\";
}
, 您可以为此设置in_array函数:
http://php.net/manual/zh/function.in-array.php
if (in_array($value,$array))
{
echo $value . \' is in the array!\';
}
, $array = Array(
0 => \'word1\',1 => \'word3\',2 => \'word3 basic\',3 => \'good\'
);
$string = \"there a good word3 basic here\";
//Convert the String to an array
$stringArray = explode(\' \',$string);
//Loop the string
foreach($stringArray as $matchedWords) {
if(in_array($matchedWords,$array )) {
echo $matchedWords.\'<br/>\';
}
}
, 像这样吗
$array = Array(
0 => \'word1\',2 => \'word3\'
);
$string = \"there a good word3 here\";
function findInArray($string,$array) {
for ($x=0; $x < count($array); $x++) {
if (preg_match(\'/\\b\' . $array[$x] . \'\\b/\',$string)) { // The \\b in the pattern indicates a word boundary,so only the distinct
return true;
}
}
return false;
}
if (findInArray($string,$array)) {
// do stuff
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。