我对一个段落上的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
?
答案 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()
;如果查询没有匹配任何内容,则循环将立即结束。