为什么这个数组和foreach不能与mysqli一起使用?

时间:2017-05-19 20:13:56

标签: php arrays foreach

我收到了这段代码

$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个小时,我无法理解。

谢谢:)

3 个答案:

答案 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返回包含数据库行的数组。

您始终可以使用方法print_rvar_dump

查看值

答案 2 :(得分:-1)

您可以尝试使用此代码: mysqli_fetch_assoc($结果)