如果找到某个字符串,则返回true或false

时间:2014-11-30 16:19:04

标签: php arrays foreach

我在编写此函数时遇到了一些问题。因为它似乎对我不起作用。

它应该做的是:

  1. 使用数组作为针搜索字符串
  2. 如果找到该字符串,则返回true并停止
  3. 如果找不到,请继续搜索,直至找到
  4. 如果数组中不存在则返回false
  5. 问题在于,每次没有匹配时,它都会返回'NOT FOUND',所以我得到'NOT FOUND'几次打印。
    如果它找到任何东西,它会打印'FOUND'一些因为某些数组元素不匹配,所以也会“发现”几次。 我怎样才能使它成为可能,如果它确实找到一个字符串,它只返回1'FOUND',如果它没有找到任何东西,它只返回1'未找到'。
    代码:

    function check($hay, $array) {
            foreach ($array as $array_element)
                if (stripos($hay, $array_element)) {
                  echo "FOUND";
            } else {
                echo "NOT FOUND";
            }
    }
    

    示例输出:

    NOT FOUNDNOT FOUNDNOT FOUNDNOT FOUNDNOT FOUNDNOT FOUNDNOT FOUNDNOT FOUNDNOT FOUNDNOT FOUNDNOT FOUNDNOT FOUNDNOT FOUND
    

    或:

    FOUNDNOT FOUNDNOT FOUNDNOT FOUNDNOT FOUNDNOT FOUNDNOT FOUNDNOT FOUNDNOT FOUNDNOT FOUNDNOT FOUNDNOT FOUNDNOT FOUND
    

    提前致谢。

2 个答案:

答案 0 :(得分:2)

function check($hay, $array) {

        foreach ($array as $array_element)
        {

            if (stripos($hay, $array_element) !== false )
                {
                      echo "FOUND";
                      return true;

                }
        }

echo "NOT FOUND";
return false;

}

您正在检查'$ hay'是否包含'$ array_element'。

如果您希望数组元素与搜索相同

if ( $hay == $array_element)

答案 1 :(得分:2)

我的建议是你的函数只负责指出是否找到了单词,以及函数火焰选择如何处理这个结果。

假设您的数组类似于:array("word1", "word2", "word3", "...")

function check($hay, $array) {
    foreach ($array as $array_element)
        if (stripos($hay, $array_element)!== false) {
            return true;
        }
    }
    return false;
}

如果找到该字符串,该函数将停止执行并返回true,否则返回false。

因此,在你调用函数的地方你应该把你的脚本放在哪里表现。

例如:

<?php
    function check($hay, $array) {
       foreach ($array as $array_element)
          if (stripos($hay, $array_element)!== false) {
            return true;
          }
       }
       return false;
     }

     $array = array('word1','word2','word3');

     if(check('word1',$array)){
        echo "found";
        callAnotherFunction;
        sendSomething

     }else{
        echo "not found"
        callAnotherFunction;
        sendSomething
     }

但是,假设您的数组类似于:array("word1", "word2", "word3", "..."),我将使用以下代码更改功能代码:

    function check($hay, $array) {
       $isFound = false; // default string is not found
       $i = 0; // count
       $arrayLength = count($array) //length of your array;
       while(!$isFound && $i<arrayLength - 1){
          if (stripos($hay, $array_element)!== false) {
             $isFound = true;
          }
          $i++;
       }
       return $isFound;
    }

在我看来,这种方式更简洁,更易于维护。

尝试一下,如果一切正常,请告诉我们。

相关问题