PHP将页面中点击数量高的链接进行高亮显示的方法
背景和需求
就好比说页面导航的左侧是分类,分类下面有很多链接。我现在想统计所有分类下面点击次数最多的一个,并把其颜色做特殊处理!
大致的数据结构如下:
{ "content":[ { "id":"1", "name":"htmldrive", "url":"http://www.htmldrive.net/", "cate":"前端开发", "clickpoint":"100" }, { "id":"2", "name":"17素材网", "url":"http://www.17sucai.com/", "cate":"前端开发", "clickpoint":"151" }, { "id":"3", "name":"阿里妈妈图标库", "url":"http://www.iconfont.cn/", "cate":"前端开发", "clickpoint":"2" }, { "id":"53", "name":"Animate.css", "url":"http://www.haorooms.com/uploads/example/Animatecss/", "cate":"前端开发", "clickpoint":"21" }, { "id":"55", "name":"Dafont", "url":"http://www.dafont.com/", "cate":"字体", "clickpoint":"1" } ] }如何对这些数据进行分类高亮显示呢?
方法和思路
最好的处理方式是在后端PHP中对齐进行处理。
思路:我们可以创建一个新的过渡数组,对原来的数组进行循环,创建一个分类的数组,然后把点击次数中的最大值和ID放到这个数组中。通过比较,获取分类中点击次数最多的ID和点击次数,然后把这个次数最多的ID放在一个新的数组中,循环原来的数据,通过inarray(),函数判断次数最多的ID是不是在这个数组当中,是的话,就给数据增加一个标示字段1,不是的话就是0。那么标示字段为1的就是分类中点击次数最多的。
调整之后输出的json是:
{ "content":[ { "id":"1", "name":"htmldrive", "url":"http://www.htmldrive.net/", "cate":"前端开发", "clickpoint":"100", "max":0 }, { "id":"2", "name":"17素材网", "url":"http://www.17sucai.com/", "cate":"前端开发", "clickpoint":"151", "max":1 }, { "id":"3", "name":"阿里妈妈图标库", "url":"http://www.iconfont.cn/", "cate":"前端开发", "clickpoint":"2", "max":0 }, { "id":"53", "name":"Animate.css", "url":"http://www.haorooms.com/uploads/example/Animatecss/", "cate":"前端开发", "clickpoint":"21", "max":0 }, { "id":"55", "name":"Dafont", "url":"http://www.dafont.com/", "cate":"字体", "clickpoint":"1", "max":0 } ] }
php的代码如下:
$sql="selectid,name,url,cate,clickpointfromcommonwebsiteorderbyidasc"; $res=$db->getAll($sql); $temp_arr=array(); foreach($resas$key=>$value){ if(!isset($temp_arr[$value['cate']])){ $temp_arr[$value['cate']]=array(); $temp_arr[$value['cate']]['max']=$value['clickpoint']; $temp_arr[$value['cate']]['id']=$value['id']; }else{ if($value['clickpoint']>$temp_arr[$value['cate']]['max']){ $temp_arr[$value['cate']]['max']=$value['clickpoint']; $temp_arr[$value['cate']]['id']=$value['id']; } } } $temp_id=array();//创建一个存放ID的临时数组 foreach($temp_arras$val){//循环之前创建的临时数组,存放分类和最多点击次数的 $temp_id[]=$val['id'];//将点击次数最多的ID赋值给了临时数组 } foreach($resas$key=>$vals){//循环原来的数据 if(in_array($vals['id'],$temp_id)){//如果次数最多的ID在原来的数组的ID中,那个加一个字段max并设置其值为1 $res[$key]['max']=1; }else{ $res[$key]['max']=0;//否则不是点击次数最多的,设置为0 } } $result['content']=$res; die(json_encode($result));//json输出 exit();