用数组中的内容替换字符串中的内容

时间:2014-04-26 18:21:56

标签: php arrays string

我正在为字符串制作一个过滤器,它会过滤掉数组中使用数字符号“#”找到的字符串中的任何单词。它似乎没有用。

以下是我的网址参数: http://www.mydomain.com/test.php?str=Noob%20no

<?php
    $blacklist = array("noob","yes");
    $t = "";
    $str = explode(" ",strtolower($_GET["str"]));
    foreach ($str as $i) {
        $s = str_replace($i, str_repeat("#", strlen($i)), $blacklist);
        $t = $t . $s[0];
    }

    echo $t;
?>

这是“noob no:”输出的内容

  

######的ob

它应该回应这样的事情:

  

#### no

4 个答案:

答案 0 :(得分:1)

$blacklist = array("noob","yes");

$words = explode(" ", $_GET["str"]);
foreach($words as &$word) {
    if(in_array(strtolower($word), $blacklist)) {
        $word = str_repeat("#", strlen($word));
    }
}

echo implode(' ', $words);

你的根本问题在于你如何使用str_repeat(),但我清理了一下。我传递了单词by reference,然后如果单词(这里是我们strtolower,感谢@Thomas)是黑名单的一部分,我们将用$word替换#。最后,我们将implode()获取最终字符串。

最后的例子:IDE One

答案 1 :(得分:0)

您未使用str_replace()功能。

试试这个:

$blacklist = array("noob", "yes");
$t = "";
$str = explode(" ", strtolower($_GET["str"]));
foreach ($str as $word) {
    $s = in_array($word, $blacklist)? str_repeat("#", strlen($word)): $word;
    $t = $t . " " . $s;
}

echo $t;

答案 2 :(得分:0)

试试这段代码:

<?php
    $blacklist = array("noob","yes");
    $t = "";
    $str = explode(" ",strtolower($_GET["str"]));
    foreach ($str as $i) {
        if (in_array($i, $blacklist))
            $i = str_replace($i, str_repeat("#", strlen($i)), $i);
        $t .= $i." ";
    }
    echo trim($t);
?>

答案 3 :(得分:0)

$blacklist = array("noob","yes");
$t = "";
$str = explode(" ",strtolower("Noob no"));
foreach ($str as $i) {
    if ( in_array($i,$blacklist) ) {
       $i = str_repeat('#',strlen($i));
    }
    $t = $t . $i . " ";
}

echo $t;