【问题标题】:How to count Array based on statement?如何根据语句计算数组?
【发布时间】:2023-04-06 01:24:01
【问题描述】:

我使用 validate php 函数来过滤坏词。我的问题是这个脚本不能在我输入的语句中计算坏词。如何计算语句中的坏词..?

例如:你是 badword1,他们是 badword2。
这句话应该是2个badword。

PHP

function validasi($string,$banned_words) {
    foreach($banned_words as $banned_word) {
        if(stristr($string,$banned_word)){
            return false;
        }
    }
    return true;
}
$banned_words = array('badword1','badword2','badword3','badword4','badword5','badword6','badword7');
$teks = $_POST['teks'];
if (!validasi($teks,$banned_words)) {
    echo count(!validasi($teks,$banned_words));
    echo 'blocked!';
}else{
    echo 'Text valid';
}

HTML

<form action="validasi.php" method="POST">
  <input type="text" name="teks">
  <input type="submit" value="Validasi">
</form>

输出

1 !blocked。

预期结果

2 !阻塞

【问题讨论】:

  • !validasi($teks,$banned_words)truefalsephp.net/count如果参数不是数组或者不是实现Countable接口的对象,则返回1。
  • 您的验证函数只返回一个布尔值(真/假),而“真”布尔值在 PHP 中打印为“1”。您将需要跟踪该函数中的计数,然后打印该计数。
  • 如果输入的是“badword1 and badword1”,结果应该是1还是2
  • PHP Count Array Elements的可能重复
  • 不一样..我已经编辑了标题...

标签: php html arrays


【解决方案1】:

如果您的脚本在一个字符串中多次使用同一个单词,则它们也不会计算额外的单词。下面是我应该使用的脚本。

function getBadWords(){
    $db_con = new PDO('dsn', 'use', 'pass'); // You PDO connection
    $query = $db_con->prepare("SELECT * FROm tb_bannedwords");
    $query->execute();
    $return = array();
    while($row=$query->fetch(PDO::FETCH_OBJ)) {
        $data = $return[] = $row->banned_words;
    }
    return $return;
}
function validate($string){
    $banned_words = getBadWords();
    $count = 0;
    foreach($banned_words as $banned_word){
        $wordCount = substr_count($string, $banned_word);
        if($wordCount > 0){
            $count = $count + $wordCount;
        }
    }
    return $count;
}
$teks = 'You\'re badword1 and they badword2 with badword1';
if(validate($teks) > 0){
    echo validate($teks) . ' blocked!';
}else{
    echo 'Text valid';
}

【讨论】:

  • 谢谢...但是我有一个问题...如果我从数据库中获取数据,如何将其更改为数组? $query = $db_con-&gt;prepare("SELECT * FROm tb_bannedwords"); $query-&gt;execute(); $return= array(); while($row=$query-&gt;fetch(PDO::FETCH_OBJ)) { $data = $return[] = $row-&gt;banned_words; } $count = 0; foreach($data as $banned_word){ $wordCount = substr_count($string, $banned_word); if($wordCount &gt; 0){ $count = $count + $wordCount; } } return $count; }
【解决方案2】:

这样做

function validasi($string,$banned_words) {
$badWordCount = 0;
foreach($banned_words as $banned_word) {
if(stristr($string,$banned_word)){
$badWordCount++;
}
}
return $badWordCount;
}
$banned_words = array('badword1','badword2','badword3','badword4','badword5','badword6','badword7');
$teks = $_POST['teks'];
$badWordsCount2 = validasi($teks,$banned_words);
if ($badWordsCount2 != 0) {
echo $badWordsCount2;
echo 'blocked!';
}else{
echo 'Text valid';
}

【讨论】:

    猜你喜欢
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多