我想在字符串中搜索多个单词。我目前有以下情况。这看起来非常笨重和丑陋。有没有更好的方法呢?
if (isset($myVar) && $myVar && strpos($myVar, 'foo') === false && strpos($myVar, 'bar') === false && strpos($myVar, 'steve') === false && strpos($myVar, 'one') === false && strpos($myVar, 'jobs') === false && strpos($myVar, 'dog') === false && strpos($myVar, 'blue') === false && strpos($myVar, 'cloud') === false && strpos($myVar, 'apple') === false)
{
// words do not exists in string
}
else
{
// words do not exists in string
}
答案 0 :(得分:1)
就像@ j08691所说的那样,构建一个搜索词的数组然后遍历它。
<?php
$words = array ( 'foo', 'bar', 'steve' );
$x=0;
do {
$found = strpos($myVar, $words[$x]);
$x++;
} while ($found !== false);
if ($found !== false) {
echo 'has all';
}
else {
echo 'words do not exists in string';
}
答案 1 :(得分:1)
您可以遍历包含所有单词的数组,并逐个执行strpos。这基本上与您当前的解决方案相同,但如果您有很多单词并且更容易维护和扩展更多单词,则不那么繁琐。
$words = array('foo', 'bar', 'steve', 'one', 'jobs', 'dog', 'blue', 'cloud', 'apple');
$match = false;
foreach ($words as $word) {
if (strpos($myVar, $word) !== false) {
$match = true;
break;
}
}
if ($match) {
// ...
} else {
// ...
}
您可以将其分解为通用函数以供重用
function str_contains($haystack, $needles, $mode = 'or') {
foreach ($words as $word) {
if (strpos($myVar, $word) !== false) {
if ($mode == 'or') {
return true;
}
} else {
if ($mode == 'and') {
return false;
}
}
}
return $mode == 'or' ? false : true;
}
$words = array(...);
if (str_contains($myVar, $words)) {
// one of your words are included
} else {
// none of your words are included
}
if (str_contains($myVar, $words, 'and')) {
// all of your words are included
} else {
// at least one of your words are not included
}
或者,您可以创建正则表达式并使用preg_match
执行此操作$words = array('foo', 'bar', 'steve', 'one', 'jobs', 'dog', 'blue', 'cloud', 'apple');
if (preg_match('/(' . implode('|', $words) . ')/', $myVar)) {
// match
} else {
// no match
}
答案 2 :(得分:0)
你可以使用preg_match()
并将这些单词作为文字正则表达式传递,就像这样
if (isset($myVar) && $myVar && (preg_mach("(foo|bar|fooo)", $myVar) === 1)) {
//do somthing
} else {
//do something else
}
答案 3 :(得分:0)
$words_to_search = ["wordA", "wordB", "wordC"];
foreach($words_to_search as $word){
if(strpos($myVar, "$word"){
//Exists
} else{
//Doesn't
}
}
答案 4 :(得分:0)
您可以使用preg_match:
if(preg_match('(bad|naughty)', $data) === 1) {
//TO DO
}
我希望它有所帮助。
答案 5 :(得分:0)
您可以使用array_intersect()
函数检查数组中的某些内容是否在另一个数组中找到。
$words = ['foo', 'bar', 'steve'];
if (array_intersect($words, explode(' ', $myVar))) {
// Exists
}