2012-05-01 5 views
1

는 내가 텍스트 필드 내 DB에 테이블이 있고 그 분야에있는 단어의 몇 가지 분석을하고 싶지만, 내가 필요로하는 다음과 같은 질문 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

내가 손에 데이터베이스가없는, 그래서 배열을 단계별로 설명합니다 : 잠시으로 foreach()를 교체

[[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] ~]$ 

이 귀하의 사용 사례에 대한 이동하려면 테이블을 통해 단계 루프 :

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

은 당신이 사용중인 데이터베이스 서버 모르는, 그래서 내가 당신에게 적용 할 수 알고 구체적인 예를 제공 할 수 없습니다.

2

로를 DB에서 각 행을 가져 와서 누적 합계를 유지하십시오.

$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; 
} 
} 
관련 문제