我一直在使用stripos来匹配字符串中的单个关键字,但是你只能定义输入字符串,要搜索的字符串和偏移...是否有一个函数或方式我可能需要找到两个关键字。比如快乐和生日,分别是快乐生日和快乐生日快乐,分别是快乐和生日。除非两个关键字都存在,否则匹配将返回false。
答案 0 :(得分:2)
显然正则表达式效率更高,但你必须这样做:
if(strpos($yourString,"Happy") !== false && strpos($yourString,"Birthday") !== false){
// do stuff
}
答案 1 :(得分:1)
return strpos($keyword1, ...) !== false && strpos($keyword2) !== false
答案 2 :(得分:1)
最简单的方法可能就是两个strpos
次呼叫
$twoNeedles = function($n1,$n2,$hay,$caseIns=false)
{
$f = $caseIns ? 'stripos' : 'strpos';
return ($f($hay, $n1) !== false)
&& ($f($hay, $n2) !== false);};
echo $twoNeedles('Happy', 'Birthday', 'Happy Freakin Birthday d00d'); //true
echo $twoNeedles('Happy', 'Ice Cream', 'Happy Freakin Birthday d00d'); //false
echo $twoNeedles('HaPpY', 'bIrTH', 'Happy Freakin Birthday d00d', true); //true
因为我喜欢过度思考
$manyNeedles = function($n,$hay,$caseIns=false)
{
$c = $caseIns ? 'stripos' : 'strpos';
$f = function($a,$b) use ($c,$hay)
{return $a && ($c($b,$hay) !== false);};
return array_reduce($n,$f,true);
};
$myNeedles = array('happy', 'birthday', 'to', 'you');
echo $manyNeedles($myNeedles, 'hap hap happy birf birthday to j000000 and you');
现在我最好在使用implode
和eval
之前退出而不是降低