如何检查数组中是否有任何单个元素在字符串中


How do I check if any single element from an array is in a string?

我正在尝试创建一个函数,该函数搜索用户输入,看看他们是否有输入一天的名称。出于某种原因,只有在输入了任何两天的名称时,此函数才会返回true。这可能很简单,但我似乎想不通。

这是我的代码:

<?php
if(isset($_POST['query']))
{
    $query=$_POST['query'];
    $dow=array('monday','tuesday','wednesday','thursday',
        'friday','saturday','sunday');
    foreach($dow as $day)
    {
        if(stripos($query, $day)==FALSE)
        {
        }
        else
        {
            echo"hurray";
        }
    }
}
?>
<html>
    <form action="datefunctiontester.php" method="post">
        <p>Search</p><input type="text" name="query">
        <input type="submit">
    </form>
</html>

===not==请参阅stripos手动输入

您应该使用

if (stripos($query, $day) === FALSE){

而不是

if (stripos($query, $day)==FALSE){

这是因为,如果在查询的开头找到名称,它将返回"0",因为第一个字符的位置将为0,这是错误的。要检查它是否存在,请使用===,它检查类型而不是值。

此外,您可以使用in_array函数来代替for循环。

if (isset($_POST['query']))
{
    $query = $_POST['query'];
    $dow = array('monday','tuesday','wednesday','thursday','friday','saturday','sunday');
    if (in_array($query, $dow) 
    {
        echo"hurray";
    }
}

试试这个:

if (isset($_POST['query']) {
   $dow = array('monday','tuesday','wednesday','thursday','friday','saturday','sunday');    
   if (in_array(trim(strtolower($_POST['query'])), $dow) echo"hurray";
}

在这种情况下不需要使用stripos()

// Force lower case for comparisons
$query = strtolower( $_POST['query'] );
$dow = array('monday','tuesday','wednesday','thursday',
    'friday','saturday','sunday');
$found = in_array($query, $dow, true);
if($found)
{
    // do something
}