干草堆功能针不能正常工作(偏移问题)

时间:2013-09-08 02:44:42

标签: php

我在这里得到了这个功能:

public function strposa($haystack, $needles=array(), $offset) {
        $chr = array();
        foreach($needles as $needle) {
                $res = strpos($haystack, $needle, $offset);
                if ($res !== false) $chr[$needle] = $res;
        }
        if(empty($chr)) return false;
        return min($chr);
}

这一个:

   function usernameCurseWords($name) {
      $string = $name;
      $array  = array('bad', 'words', 'are', 'here');

      if (parent::strposa($string, $array, 0)) {
         return true;
      }
   }

我称之为:

if ($this->usernameCurseWords($username)) { throw new Exception($error['userCurseWords']); }

如果haystack为“1bad”,则该函数将返回true(“bad”为针)。

但是如果haystack是“badblablbla”,那么该函数返回false。

知道为什么这不能正常工作吗?

3 个答案:

答案 0 :(得分:1)

你知道strpos将返回针存在的位置相对于haystack字符串的开头(与offset无关)。另请注意,字符串位置从0开始,而不是1.

因此,如果您的字符串位于0位置,则返回零。

但在你的usernameCurseWords()中,如果条件是这样的话。

如果在零位置找到位置,那么它将被视为假; 明白了我的意思。

echo strpos('badall', 'bad',0);

将在0位置返回0. b / c位置。

echo strpos('1badall', 'bad',0);

将在1个位置返回1 b / c位置。

if (parent::strposa($string, $array, 0)) {
     return true;
  }

但是此行仅在return为1时才接受。 所以根据这个改变你的代码。

if (parent::strposa($string, $array, 0) !== false) {
     return true;
  }

//尝试类型匹配。

答案 1 :(得分:0)

!== FALSE ... and 0 is not the same, FALSE is boolean, 0 (zero) not

所以只需使用

!=

答案 2 :(得分:0)

这一行: if(empty($ chr))返回false;

empty(0)= true 所以当偏移量为零时,你就会得到真的