記事の件名からタグ クラウドを作成しています。各タイトルを取得し、単語に分割して配列に入れ、単語 strlen > 3 をチェックし、除外された単語配列には入れません。これはうまくいきます....
私が苦労しているビットは次のとおりです。
- 順序をランダム化し、出力を 20 に制限する方法
- 重複を除外します。重複とは、単語が重複しているが同じ catid にあることを意味します。
たとえば、次の例では、dog という単語が 5 回繰り返されていますが、3 つの異なる catid で使用されています。したがって、個別の catid ごとに dog という単語を 3 回出力したいと思います。配列:
'subject' => 'dog is running', 'id' => '1', 'catid' => '19'
'subject' => 'dog is walking', 'id' => '2', 'catid' => '18'
'subject' => 'dog is sitting', 'id' => '3', 'catid' => '18'
'subject' => 'dog is eating', 'id' => '4', 'catid' => '19'
'subject' => 'dog is barking', 'id' => '5', 'catid' => '20'
ここに私のコードがあります:
$excluded_word_array = array('a','blah','bleh');
// prepare the tag cloud array for display
$terms = array(); // create empty array
$query = mysql_query("SELECT * FROM hesk_kb_articles WHERE type = '0'");
while($row = mysql_fetch_array($query)){
$subject = $row['subject'];
$id = $row['id'];
$catid = $row['catid'];
$words = explode(" ", $subject);
foreach ($words as $val){
if (strlen($val) > 3) {
$stripped_val = strtolower(ereg_replace("[^A-Za-z]", "", $val));
if (!in_array($stripped_val, $excluded_word_array)) {
shuffle($stripped_val);
$terms[] = array('subject' => $stripped_val, 'id' => $id, 'catid' => $catid);
}
}
}
}
sort($terms);
?>