关于php:数组元素是否包含子字符串?

Does array element contain substring?

本问题已经有最佳答案,请猛点这里访问。

我想要一个检查数组项是否包含字符串的函数。像这样的:

1
array(1 => 'Super-user', 'Root', 'Admin', 'Administrator', 'System', 'Website', 'Owner', 'Manager', 'Founder');

然后检查admin12应该返回true,因为admin12的一部分(admin也是数组的一部分。

我走了这么远:

1
2
3
4
5
6
7
8
$forbiddennames= array(1 => 'Super-user', 'Root', 'Admin', 'Administrator', 'System', 'Website', 'Owner', 'Manager', 'Founder');    

if(in_array( strtolower($stringtocheck), array_map('strtolower', $forbiddennames))){
        echo '"This is a forbidden username."';
    } else {
        echo 'true';
    }
}

当我检查admin时,这只会回应"这是禁止使用的用户名"。我也希望它在检查admin12时也能回响。

这是可能的吗(以及如何做到的)?


循环遍历$forbiddennames数组,并使用stripos检查给定的输入字符串是否与数组中的任何项匹配:

1
2
3
4
5
6
7
8
function is_forbidden($forbiddennames, $stringtocheck)
{
    foreach ($forbiddennames as $name) {
        if (stripos($stringtocheck, $name) !== FALSE) {
            return true;
        }
    }
}

使用方法如下:

1
2
3
4
5
if(is_forbidden($forbiddennames, $stringtocheck)) {
    echo"This is a forbidden username.";
} else {
    echo"True";
}

演示!


1
2
3
4
5
6
7
foreach ($forbiddennames as $forbiddenname) {
    $nametocheck = strtolower($stringtocheck);
    if(strpos($stringtocheck, $forbiddenname) !== false) {
        echo"This is a forbidden username.";
        break;
    }
}


您需要phps"strpos"函数。循环遍历每个数组元素,然后根据"strpos"php strpos引用检查每个元素

1
2
3
4
5
6
7
foreach($forbiddennames as $fn){
 if(strpos($stringtocheck,$fn)){
  //found it!
 }else{
  //not found!
 }
}


使用数组映射、foreach或其他方法并不重要。可能的解决方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
$forbiddenNames = array('admin', 'bannedName');
$input = 'Admin12';
$allowed = true;
foreach($forbiddenNames as $forbiddenName) {
    if(stripos($input, $forbiddenName) !== false) {
        echo $input, ' is invalid';
        $allowed = false;
        break;
    }
}
if($allowed === true) {
    echo $input, ' is valid';
}