创建多维数组时跳过的值

时间:2014-08-28 00:14:18

标签: php arrays multidimensional-array

我对一个段落上的preg_split有一系列的单词。我试图将这些单词与已保存的"关键字进行比较"存储在每个用户中'轮廓。当我对这些单词进行foreach时,当多个人拥有相同的关键字时,我无法构建数组。

数据库保留了以下内容。

   id    value 
------+--------
   8      frac
   8       oil
   8    trucks
   9       mud
   9       oil
   9       tar

以下是我使用的查询。

$allwords = preg_split("/(?<=\w)\b\s*/", $sentence);
$matches = array();
foreach ($allwords as $word) {
  $result = db_query('SELECT n.id, n.value FROM {keywords} n WHERE n.value = :fkv', array('fkv' => $word));
  if($result->rowCount()) {
    $usermatch = $result->fetchField(0);
    $matches[$usermatch][] = $word;
  }
}

我生成的多维数组将在第一个用户上获取oil,但在第二个用户上不获取。例如,我的句子将包含oil mud trucks,但输出将如下所示:

array
(
  [8] => array
    (
      [0] => oil
      [1] => trucks
    )
  [9] => array
    (
      [0] => mud
    )
)

用户9应该有一个条目,它会显示[1] => oil但它没有显示。我觉得我的foreach是在错误的地方,或者我需要重置循环,但我不知所措。如何让用户9同时显示oil

1 个答案:

答案 0 :(得分:0)

您需要遍历查询返回的所有行:

foreach ($allwords as $word) {
    $result = db_query('SELECT n.id, n.value FROM {keywords} n WHERE n.value = :fkv', array('fkv' => $word));
    while ($usermatch = $result->fetchField(0));
        $matches[$usermatch][] = $word;
    }
}

您不需要先测试rowCount();如果查询没有匹配任何内容,则循环将立即结束。