数组元素是否包含子字符串?

时间:2013-10-27 13:51:07

标签: php arrays string contains

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

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

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

我走到这一步:

$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时也能回显。

这可能(以及如何)?

4 个答案:

答案 0 :(得分:6)

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

function is_forbidden($forbiddennames, $stringtocheck) 
{
    foreach ($forbiddennames as $name) {
        if (stripos($stringtocheck, $name) !== FALSE) {
            return true;
        }
    }
}

并使用如下:

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

Demo!

答案 1 :(得分:3)

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

答案 2 :(得分:2)

如果你使用array_map,foreach或其他东西并不重要。可能的解决方案:

$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';
}

答案 3 :(得分:2)

你想要PHP的'strpos'功能。循环遍历每个数组元素,然后针对'strpos'PHP strpos reference

检查每个元素
foreach($forbiddennames as $fn){
 if(strpos($stringtocheck,$fn)){
  //found it!
 }else{
  //not found!
 }
}