php中有这样的字符串
"the quick brown fox eats yellow eggs"
"another sentence"
...
作为
的输出foreach ($array as &$value)
{
//$value = "the quick brown fox eats yellow Eggs" or another one
}
,然后我有一个mysql-database
id,wort
1,fox
2,egg
...
我试过了
SELECT wort FROM table WHERE word LIKE LOWER('%".$value."%')";
的目标是仅用foreach-loop中所需的负载量来确定$value是否包含mysql-database的wort。如果是,$error = true;$error = false;
注意:
- 在$value中有鸡蛋,在mysql-db中有鸡蛋,它应该仍然返回一个$error = true;
- 有值的单词数一般要大于数据库中的单词数
由于针在数据库中,而干草堆在PHP中,因此您需要遍历数据库并将其与字符串进行比较。
试试这个:
$array=[
"the quick brown fox eats yellow eggs",
"another sentence"
];
$mysqli=new mysqli("127.0.0.1","root","password","database");
$result=$mysqli->query("SELECT `word` FROM `table`");
while ($row=$result->fetch_assoc()) {
$words[]=$row['word'];
}
foreach ($array as $value) {
if (strpos($value,$words)!==false) {
echo $value." contains a word from the database!'n<br>";
$error=true;
}
}
$mysqli->close();
试试这个查询:
"SELECT word FROM table WHERE LOCATE(word, LOWER('".mysqli_real_escape_string($value)."')) <> 0 OR LOCATE(LOWER('".mysqli_real_escape_string($value)."'), word) <> 0"
您有很多字符串,您尝试查找它们是否包含数据库中的单词。在这种情况下,您必须将字符串拆分为多个单词:
$error = false;
foreach($someArray AS $value) {
$words = explode(' ', $value);
foreach($words AS $word) {
$sql = 'SELECT * FROM table WHERE word LIKE "%'. mysqli_real_escape_string($value).'"'; // use the proper escape function here.
if( $dbObject->query($sql)->num_rows() > 0 ) {
$error = true;
break;
}
}
if($error) {
break;
}
}
您也可以尝试将数据库单词加载到数组中,然后循环遍历它们,例如:
$error = false;
foreach($wordsFromDb AS $word) {
foreach($stringsArray as $string) {
if(stripos($string, $word) !== false) {
$error = true;
break;
}
}
if($error) {
break;
}
}
您可以使用preg_match()
代替stripos
来进行更准确的比较。请注意,我没有测试这段代码,但你应该得到的想法。