PHP-无法从foreach循环中获取匹配的值

时间:2018-09-23 05:03:22

标签: php arrays for-loop

我正在尝试建立一个循环,以检测您是否输入了禁止的用户名。但是我想向用户报告进行了哪些匹配,以确定使用了哪些关键字来禁止该名称。您觉得这有什么问题吗?

function matchusername($bannedusername, $username)
{
    foreach($bannedusername as $bannedusernam => $value){
        if (strpos($username, $bannedusernam) !== false) {
            $offendingusername = $value;
            return true;
        }
    }
    return false;
}

我还有更多代码将检查有效注释以及其他一些其他事项。

当我添加=> $value$offendingusername = $value;时,似乎只是中断了该循环并跳过了该循环并允许用户以任何方式发布。当我把这两个部分拿走时,它会检测到被禁止的用户名,并且不允许您像应有的那样发帖,但是我真的很想让它报告匹配的值,以便用户写长评论时,他们可以看看为什么他们不能发布。

我看了很多其他资料,这似乎是这样做的方法,但是它没有用。有任何想法吗?谢谢。

3 个答案:

答案 0 :(得分:1)

似乎您在foreach循环中的键和值之间混合了 您的变量$ bannedusernam是数组键

为了修复返回值,一旦找到匹配项,我将使用一个布尔变量并使用break来使该foreach

function matchusername($bannedusername, $username)
{
 $ret = false;
    foreach($bannedusername as $key => $value){
        if (strpos($username, $value) !== false) {
            $offendingusername = $value;
             $ret = true;
             break;
        }
    }

   if ($ret)
   {
 return $offendingusername;
  } else {
    return $ret;
  } 
}

答案 1 :(得分:0)

您应将$offendingusername声明为全局变量。

function matchusername($bannedusername, $username)
{
    global $offendingusername;

    foreach($bannedusername as $bannedusernam => $value){
        if (strpos($username, $bannedusernam) !== false) {
            $offendingusername = $value;
            return true;
        }
    }
    return false;
}

另一个想法是返回匹配并进行检查。

function matchusername($bannedusername, $username)
{
    foreach($bannedusername as $bannedusernam => $value){
        if (strpos($username, $bannedusernam) !== false) {
            return $value;
        }
    }
    return false;
}

$ret = matchusername($bannedusername, $username);
if($ret !== false)
{
    ...
}

答案 2 :(得分:0)

更新后的答案

请运行print_r($bannedusername);并在您的答案中发布,以便我们可以看到正在处理的数据类型。

但是在此之前请尝试一下:

function matchusername($username, $bannedusername){

foreach($bannedusername as $badWord){
    if (strpos($username, $badWord) !== FALSE) {
        return $username;
    }
}
return FALSE;
}

这是您将如何使用它:

if($user = matchusername($username, $bannedusername)){

  echo $user . ' You have a banned username.<br>';

}else{

  echo 'Your post was successful.';

}