我收到了这段代码
$a = "I love Steve Jobs.";
$targets = array('bill gates','steve jobs');
foreach($targets as $t)
{
if (preg_match_all("/\b" . $t . "\b/i", $a)) {
$b[] = $t;
}
}
此代码在数组中找到所有匹配项,这很棒
现在我的数据库中有一个名为“tags”的表 - 这里有大约500个关键字。我不想和上面的剧本一起工作。
我在逻辑上所要做的就是制作一个替换$targets
的数组。
我在这里制作的代码不起作用:
$result = $con->query("SELECT tag FROM tags");
$targets = $result->fetch_all(MYSQLI_ASSOC);
foreach($targets as $t)
{
if (preg_match_all("/\b" . $t . "\b/i", $a)) {
$b[] = $t;
}
}
我收到了这个通知:
注意:数组到字符串转换
我不知道该怎么做 - 经过了2个小时,我无法理解。
谢谢:)
答案 0 :(得分:1)
mysqli_fetch_all/mysqli_result::fetch_all返回表示结果行的数组数组。在您的示例中,它将返回如下结构:
array(
array('tag' => 'bill gates'),
array('tag' => 'steve jobs')
)
您应该在循环中使用$t['tag']
而不是$t
。
顺便说一下,快速调试这些情况的最简单方法是,您可以使用print_r()或var_dump()输出查询结果(或任何其他变量),并查看它们的结构。
答案 1 :(得分:1)
if (preg_match_all("/\b" . $t . "\b/i", $a)) {
但是$t
是数组中的行,即带有键tag
的数组。
你应该:
if (preg_match_all("/\b" . $t['tag'] . "\b/i", $a)) {
$b[] = $t['tag'];
fetch_all
返回包含数据库行的数组。
答案 2 :(得分:-1)
您可以尝试使用此代码: mysqli_fetch_assoc($结果)