我使用了以下问题php: sort and count instances of words in a given string
我的数据库中有一个带有文本字段的表,想要对该字段中的单词进行一些分析,但我需要结合结果
ID | Text Field
1 | happy beautiful happy lines pear gin happy lines rock happy lines pear
2 | happy lines pear gin happy lines rock happy lines pear
我现在有一个看起来像这样的数组(但是每行一次)
第1行
Array (
[happy] => 4
[beautiful] => 1
[lines] => 3
[pear] => 2
[gin] => 1
[rock] => 1 )
第2行
Array (
[happy] => 4
[lines] => 3
[pear] => 2
[gin] => 1
[rock] => 1 )
如何为所有行执行此操作以组合结果 - 数据库中有30000行文本
预期结果:
Array (
[happy] => 8
[beautiful] => 1
[lines] => 6
[pear] => 4
[gin] => 2
[rock] => 2 )
答案 0 :(得分:2)
当你从数据库中获取每一行时,保持一个总计
$total = array();
foreach($row as $word=>val){
if(!isset($totals[$word])) $totals[$word] = 0;
$totals[$word] += $val;
}
答案 1 :(得分:2)
我手头没有你的数据库,所以我将逐步演示一个数组:
[ghoti@pc ~]$ cat doit.php
#!/usr/local/bin/php
<?php
$a=array(
'1' => "happy beautiful happy lines pear gin happy lines rock happy lines pear",
'2' => "happy lines pear gin happy lines rock happy lines pear",
'3' => "happy rock pear happy happy happy",
);
$wordlist=array();
foreach ($a as $index => $line) {
foreach (explode(" ", $line) as $word) {
$wordlist[$word]++;
}
}
print_r($wordlist);
[ghoti@pc ~]$ ./doit.php
Array
(
[happy] => 11
[beautiful] => 1
[lines] => 6
[pear] => 5
[gin] => 2
[rock] => 3
)
[ghoti@pc ~]$
为了满足您的使用需求,请使用遍历表格的while循环替换foreach()
:
$sql = "SELECT id,wordlist FROM yadda";
$result = db_query($sql);
while ($row = db_fetch_row($result)) {
...
}
我不知道您使用的数据库服务器是什么,因此我无法提供我知道适用于您的具体示例。
答案 2 :(得分:1)
我这样做:创建一个名为words的新表,从数据库中拉出每一行,循环遍历它并爆炸字符串并在数据中插入每个单词,可选择存储主表id等数据然后可以获得关于上下文或单词的大多数其他统计数据,如果您处理许多行和大数据集这可能不是最佳选择
然后你可以使用sql来建立你的计数等
答案 3 :(得分:1)
您可以使用SQL直接计算单词数。看一下之前的答案:
答案 4 :(得分:1)
PHP数组可用作地图。因此,您所要做的就是获取每一行的数据,将单个数组的单词映射维护为键,将其计数值作为值。每当您看到密钥存在时,只需添加到计数中,或者添加具有相应计数的新密钥。
$grandtotal = array();
foreach($row as $key=>$val) {
if(array_key_exists($key, $grandtotal)) {
$grandtotal[$key] += $val;
}
else {
$grandtotal[$key] = $val;
}
}