2012-05-01 125 views
1

我已經使用了以下問題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行的文本在DB

預期結果:

Array (
    [happy] => 8 
    [beautiful] => 1 
    [lines] => 6 
    [pear] => 4 
    [gin] => 2 
    [rock] => 2) 
+0

那麼,你想添加數組在一起? –

+0

是的,我確實有30000個陣列 – Rob

回答

2

我沒有你手頭上的數據庫,所以我會通過一個數組步進證明:

[[email protected] ~]$ 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); 

[[email protected] ~]$ ./doit.php 
Array 
(
    [happy] => 11 
    [beautiful] => 1 
    [lines] => 6 
    [pear] => 5 
    [gin] => 2 
    [rock] => 3 
) 
[[email protected] ~]$ 

爲了使這一去爲你的使用情況,與同時更換foreach()循環,通過你的表步驟:

$sql = "SELECT id,wordlist FROM yadda"; 
$result = db_query($sql); 
while ($row = db_fetch_row($result)) { 
    ... 
} 

我不知道你正在使用的數據庫服務器,所以我不能提供,我知道將適用於你的具體例子。

2

由於你從數據庫獲得每一行,保持一個運行總計

$total = array(); 
foreach($row as $word=>val){ 
    if(!isset($totals[$word])) $totals[$word] = 0; 
    $totals[$word] += $val; 
} 
1

我會這樣做:創建一個稱爲單詞的新表,將每一行從數據庫中拉出,循環遍歷它並分解字符串並在數據中插入每個單詞,並可選擇存儲數據(如主表id),以便隨後獲取有關上下文或詞最額外的統計,如果你處理很多行和大型數據集,這可能不會是

那麼你可以使用SQL來建立自己的計數等的最佳選擇

1

PHP數組可以作爲地圖。所以你所要做的就是獲取每一行的數據,維護單個數組作爲關鍵字和數量作爲值的數組映射。每當您看到密鑰存在時,只需添加到計數中,或者添加具有相應計數的新密鑰。

$grandtotal = array(); 
foreach($row as $key=>$val) { 
if(array_key_exists($key, $grandtotal)) { 
    $grandtotal[$key] += $val; 
} 
else { 
    $grandtotal[$key] = $val; 
} 
} 
相關問題