从数据库返回一个数组

时间:2013-11-02 04:14:39

标签: php sql

使用str_ireplace和从数据库表返回的数组时遇到问题。 我想使用一个表来保存将从聊天中过滤掉的坏词。

$msg = "some user input, with a few bad words."; //(not putting bad words here, just an example)
$words = $this->db->query("SELECT * FROM tblBadWords")->result_array(); 
$replacement = "@#$@#";   
$msg = str_ireplace($words, $replacement, $msg);  //<--nothing happens

$word = str_ireplace($words[0], $replacement, $msg);  //<--nothing happens

$word = str_ireplace($words[1], $replacement, $msg);  //<--filters first word in table only

我做错了什么?请注意我是php数据库编码的新手。

2 个答案:

答案 0 :(得分:0)

我想,从那段代码中,$ words将是一个数组,每个元素代表一行SQL结果。如果你有这样的表:

    id |         badword
   ----|--------------------------
    1  |         kangaroo
    2  |         bad-kangaroo
    3  |         very-bad-kangaroo

PHP数组中将有三行。肯定有很多解决方案,但作为一个简单的解决方案,您可以像这样迭代数组:

foreach ($words as $lineInMyBadWordTable) {
    $msg = str_ireplace($lineInMyBadWordTable['badword'], $replacement, $msg);
}

所以,基本上,如果你访问$ words [0]或$ words [n],你将访问数据库管理系统返回的结果集的一行。 $ words [0]也很可能是一个结果,代表记录的完整行。如需进一步参考,请参阅str_ireplace的PHP文档:

[http://php.net/manual/en/function.str-ireplace.php]

希望有所帮助。

答案 1 :(得分:0)

你需要挖掘你的阵列。目前,您的查询返回如下内容:

Array
    (
        [0] => Array
            (
                [ID] => 1
                [BadWord] => bad
            )
        [1] => Array
            (
                [ID] => 2
                [BadWord] => Input
            )
    )

这来自我的样本假设一个表:

ID    |  BadWord
---------|-----------
1        | bad
2        | Input

你可以通过遍历数组中的每个数组来获得挖掘,得到数组块(即$ badword [1],其中$ badword [0]是你的ID字段;我发现需要指定表标题为是我的print_r显示数组的方式。)

foreach($words as $badword){
        $replacethese = $badword['BadWord'];
        $msg = str_ireplace($replacethese, $replacement, $msg);
    }

现在你可以用$ msg做任何事情。我这样出来了:

some user @#$@#, with a few @#$@# words.