简明现代魔法 -> Flex/ActionScript/AIR -> 眩目的标签云
眩目的标签云
2009-10-06
效果演示
简明现代魔法标签云
首先把你的Tags最好放到一个一维的数组里面.比较容易操作。
查询出所有Tags的方法:
$sql = "SELECT tags FROM article";
$rs = $db->query($sql);
while ($tags = $db->fetch_array($rs)) {
$arr[] = split("\|",$tags['tags']);
}
$arr这个数组里面就存在着所有的Tags了。但是里面有重复的,有空的,比较郁闷,并且还是个二维数组。
为了解决这个问题,我写了个类,这个类适用于我这种思路设计的Tags筛选。直接看注释吧。
<?php
/**
* Tags标签生成类.
*
* 适合于数据库中的Tags为文章的一个字段.比如.某个值为:|aaa|bbb|ccc| (注意.前后都要带竖线或者其他符号)
* 不再令Tags为一个表.增快查询时间.但是数组组合比较耗时.
* 这样做的好处就是一个文章可以有无限多的Tags.在输入的时候一个输入框就可以搞定.用某个特定的符号(比如"|")分隔开就可以了.
*
* 这个类用于查询数据库中所有的标签.当然你可以在你的SQL语句里进行随机抽出一部分.
*
* 从标签中查询所有文章SELECT article FROM table WHERE tags LIKE '%|aaa|%'
*
*/
class Tags {
/**
* 所有标签
*
* @var array
* @access private
*/
private $tagsArr = array();
/**
* 构造函数.把数据库中取出来的Tags进行转换
*
* @param array $array
* @return void
* @access public
*/
public function Tags($array){
$tags = array();
$this->tagsArr = array_unique(array_diff($this->flattenArray($array),array("")));
}
/**
* 把二维数组转换成一维数组
*
* @param array $array
* @return array
* @access private
*/
private function flattenArray($array) {
while (($v = array_shift($array)) !== null) {
if (is_array($v)) {
$array = array_merge($v, $array);
} else {
$tmp[] = $v;
}
}
return $tmp;
}
/**
* 获得最终的Tags数组
*
* @return array
* @access public
*/
public function getTags(){
return $this->tagsArr;
}
}
这样的话上面的问题就非常简单了,完整的核心代码:
require_once './lib/Tags.php';
$sql = "SELECT tags FROM article"; //在这里你可以随机或者限制一下取出的个数.
$rs = $db->query($sql);
while ($tags = $db->fetch_array($rs)) {
$arr[] = split("\|",$tags['tags']);
}
$tags = new Tags($arr);
$tagsArr = $tags->getTags();
最后的这个$tagsArr就是我们得到的所有Tags的一维数组了。
| 随机文章推荐 |
| 网站分类 |
|
copyright © 2009 简明现代魔法 学习、分享、进步 power by Gonn 感谢所有关心和支持本站的朋友们 |