一定要简单,但找不到答案 如何测试数组中的某个值是否包含在字符串中? 输出应该是真或假。
$array = Array(
0 => 'word1',
1 => 'word2',
2 => 'New York'
3 => 'New car'
);
$string = "Its a sunny day in New York";
试图澄清。在这种情况下,数组[3]不应该匹配。只有数组[2]应该是。
答案 0 :(得分:2)
in_array
的功能替换为:
array_filter(
array_map("strpos", array_fill(0, count($words), $string), $words),
"is_int")
答案 1 :(得分:1)
<强>更新强>
单词边界无关的解决方案是在输入字符串和搜索词周围添加空格:
$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;
}
查看DEMO
旧回答:
您可以使用正则表达式:
function quote($a) {
return preg_quote($a, '/');
}
$word_pattern = implode('|', array_map('quote', $array));
if(preg_match('/\b' . $word_pattern . '\b/', $str) > 0) {
}
重要的部分是边界字符\b
。如果您搜索的值是字符串中的(序列)单词,则只会得到匹配。
答案 2 :(得分:1)
蛮力方法是:
$words = implode('|', $array);
if (preg_match("/($words)/", $string, $matches)) {
echo "found $matches[1]";
}
答案 3 :(得分:0)
$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/>';
}
}
答案 4 :(得分:0)
$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>";
}
答案 5 :(得分:0)
您可以为此设置in_array函数: http://php.net/manual/en/function.in-array.php
if (in_array($value, $array))
{
echo $value . ' is in the array!';
}
答案 6 :(得分:0)
这样的东西?
$array = Array(
0 => 'word1',
1 => 'word2',
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
}