我的第一个想法是用 array_walk() 和回调来解决问题,如下:
<?php
$search=array("<",">","!=","<=",">=");
$value = "name >= vivek ";
function test($item, $key, $str)
{
if( strpos($str, $item) !== FALSE ) {
echo "$item found in \"$str\"\n";
}
}
array_walk($search, 'test', $value);
// output:
> found in "name >= vivek "
>= found in "name >= vivek "
现场演示:http://3v4l.org/6B0WX
虽然这在没有 foreach 循环的情况下解决了问题,但它用“什么”而不是“是/否”响应来回答问题。以下代码直接回答问题,也允许回答“what”,如下:
<?php
function test($x)
{
$value="name >= vivek ";
return strpos($value, $x);
}
$search = array("<",">","!=","<=",">=");
$chars = array_filter( $search, "test" );
$count = count($chars);
echo "Are there any search chars? ", $answer = ($count > 0)? 'Yes, as follows: ' : 'No.';
echo join(" ",$chars);
// output:
Are there any search chars? Yes, as follows: > >=
现场演示:http://3v4l.org/WJQ5c
如果响应是否定的,则输出为“否”。后跟一个空格。
与第一个解决方案相比,第二个解决方案的一个关键区别在于,在这种情况下,有一个可以操纵的返回结果。如果数组的元素与字符串中的字符匹配,则 array_filter 将该元素添加到 $chars。新数组的元素计数回答了问题,并且数组本身包含任何匹配项(如果希望显示它们)。