检查字符串是否包含数组中的任何值?

3
$search=array("<",">","!=","<=",">=")
$value="name >= vivek ";

我想检查$value是否包含$search数组中的任何一个值。我可以使用foreach和strpos函数来找到答案。如果不使用foreach,我还能找到答案吗?如果可以,请帮助我解决这个问题。


发布了这个问题的最简单答案。 - Utkarsh Dixit
查看这个链接:https://dev59.com/HXI95IYBdhLWcg3w2R3z - fortune
@Vivek 这个问题值得点赞。 - Utkarsh Dixit
6个回答

2

$value爆炸成数组,然后使用php中的array_intersect()函数来检查字符串是否不包含数组的值。使用下面的代码:

    <?php
    $search=array("<",">","!=","<=",">=");
    $value='name >= vivek ';
    $array = explode(" ",$value);

    $p = array_intersect($search,$array);
    $errors = array_filter($p);
//Check if the string is not empty
    if(!empty($errors)){
    echo "The string contains an value of array";
    }
    else
    {
    echo "The string does not containe the value of an array";
    }

    ?>

在这里测试代码http://sandbox.onlinephpfunctions.com/code/7e65faf808de77036a83e185050d0895553d8211

希望这能帮到你


0

是的,但这将需要您重新构建您的代码。

$search = array("<" => 0, ">" => 1,"!=" => 2,"<=" => 3,">=" => 4);

$value = "name => vivek ";

$value = explode(" ", $value);

foreach($value as $val) {
    // search the array in O(1) time
    if(isset($search[$val])) {
       // found a match
    }
}


0
使用 array_map() 和 array_filter()。
function cube($n)
{
    $value="name => vivek ";
    return strpos($value, $n);
//return($n * $n * $n);
}

$a = array("<",">","!=","<=",">=");
$value="name => vivek ";

$b = array_map("cube", $a);
print_r($b);

$b = array_filter($b);

print_r($b);

1
array_filter 接受一个回调函数,这里不需要使用 array_map - ccKep

0
$search  = array("<",">","!=","<=",">=");
$value="name => vivek ";
foreach($value as $searchval) {
  if(strpos($value,  $searchval) == false)
  {
  echo "match not found";
  }
  else
  {
  echo "match found";
  }
}

0

以下是使用array_reduce的解决方案:

<?PHP
function array_in_string_callback($carry, $item)
{
    list($str, $found) = $carry;
    echo $str . " - " . $found . " - " . $str . " - " . $item . "<br/>";
    $found |= strpos($str, $item);
    return array($str, (boolean) $found);
}

function array_in_string($haystack, $needle)
{
    $retVal = array_reduce($needle, "array_in_string_callback", array($haystack, false));
    return $retVal[1];
}

$search=array("<",">","!=","<=",">=");
$value="name >= vivek ";

var_dump(array_in_string($value, $search));
?>

0

我的第一反应是使用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循环解决问题,但它的回答是“什么”,而不是“是/否”。以下代码直接回答了问题,并允许回答“什么”,如下:

<?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中。新数组的元素计数回答了问题,而数组本身包含任何匹配项,如果希望显示它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接