使用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数据库编码的新手。
答案 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.