php 随机排序广告的实现代码


Posted in PHP onMay 09, 2011

投放广告的人都很关注他的广告会放在哪个位置, 因为这可能影响点击次数, 甚至是否在第一屏显示. 就这个问题, 其实很容易解决, 只要随机显示广告即可.

代码如何实现? 在这我推荐两种随机显示广告的处理办法.

在后端处理
在后端排序好再输出页面. 将广告节点用数组存放, 对数组进行随机排序, 再输出经过排序的数组. 参考代码 (PHP) 如下:

// 用数组存放广告列表 
$ads = array('<a href="#"><img src="ad-125x125.png" alt="广告 1" width="125" height="125" /></a>' 
,'<a href="#"><img src="ad-125x125.png" alt="广告 2" width="125" height="125" /></a>' 
,'<a href="#"><img src="ad-125x125.png" alt="广告 3" width="125" height="125" /></a>' 
,'<a href="#"><img src="ad-125x125.png" alt="广告 4" width="125" height="125" /></a>' 
); // 对数组进行随机排序 
shuffle($ads); 
// 输出经过排序的数组 
$html = ''; 
foreach ($ads as $ad) { 
$html .= $ad; 
} 
echo $html;

我们来扩展一下, 如果我是站长, 预留了 4 个广告位, 但现在只有 3 个在投放; 我想在空置的广告位放置一个 "虚位以待" 的广告招租链接, 并显示在最后, 该如何处理呢? 在排序完成之后再插放广告招租链接就可以了.
// 用数组存放广告列表 
$ads = array('<a href="#"><img src="ad-125x125.png" alt="广告 1" width="125" height="125" /></a>' 
,'<a href="#"><img src="ad-125x125.png" alt="广告 2" width="125" height="125" /></a>' 
,'<a href="#"><img src="ad-125x125.png" alt="广告 3" width="125" height="125" /></a>' 
); // 对数组进行随机排序 
shuffle($ads); 
// 输出经过排序的数组 
$html = ''; 
foreach ($ads as $ad) { 
$html .= $ad; 
} 
// 添加广告招租链接 
$html .= '<a href="#"><img src="sell-ad-125x125.png" alt="虚位以待" width="125" height="125" /></a>'; 
echo $html;

我就是用这个方法来输出 125x125 广告的, 因为它直观可靠, 处理方便. 但是如果你希望对页面做静态化, 建议选用 JS 随机排序的方法.

在前端处理
在后端按原有循序输出, 在页面通过 JavaScript 重新排序. 假设页面输出广告区域的 HTML 片段如下.

<div id="ads"> 
<a href="#"><img src="ad-125x125.png" alt="广告 1" width="125" height="125" /></a> 
<a href="#"><img src="ad-125x125.png" alt="广告 2" width="125" height="125" /></a> 
<a href="#"><img src="ad-125x125.png" alt="广告 3" width="125" height="125" /></a> 
<a href="#"><img src="ad-125x125.png" alt="广告 4" width="125" height="125" /></a> 
</div>

我们可以通过 JS 来对广告进行重新排序. 参考代码如下:
<div id="ads" style="display:none;"> 
<a href="#"><img src="ad-125x125.png" alt="广告 1" width="125" height="125" /></a> 
<a href="#"><img src="ad-125x125.png" alt="广告 2" width="125" height="125" /></a> 
<a href="#"><img src="ad-125x125.png" alt="广告 3" width="125" height="125" /></a> 
<a href="#"><img src="ad-125x125.png" alt="广告 4" width="125" height="125" /></a> 
</div> 
<div id="random-ads" style="display:none;"> 
</div> <script type="text/javascript"> 
//<![CDATA[ 
var source = document.getElementById('ads'); 
var target = document.getElementById('random-ads'); 
var ads = source.getElementsByTagName('a'); 
// 下标数组 
var arr = new Array(); 
for(var i=0; i<ads.length; i++) { 
arr[i] = i; 
} 
// 随机排序 
function randomSort(a, b){ 
var tmp = parseInt((Math.random() + 0.5), 10); 
return tmp ? a-b : b-a; 
} 
// 将老的广告区的节点随机插放到新的广告区 
arr.sort(randomSort); 
for(var i=0; i<arr.length; i++) { 
target.appendChild(ads[arr[i]].cloneNode(true)); 
} 
// 显示新的广告区和移除老的广告区 
source.parentNode.removeChild(source); 
target.style.display = 'block'; 
//]]> 
</script>

如果有如同方法 1 那样的扩展需求, 将空广告位显示在最后, 且显示广告招租链接, 该如何处理? 这个当作课后习题吧...
PHP 相关文章推荐
介绍几个array库的新函数 php
Dec 29 PHP
php利用iframe实现无刷新文件上传功能的代码
Sep 29 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
Jun 24 PHP
一致性哈希算法以及其PHP实现详细解析
Aug 24 PHP
PHP代码优化之成员变量获取速度对比
Feb 28 PHP
用PHP解决的一个栈的面试题
Jul 02 PHP
php邮件发送的两种方式
Apr 28 PHP
修改WordPress中文章编辑器的样式的方法详解
Dec 15 PHP
php curl中gzip的压缩性能测试实例分析
Nov 08 PHP
PHP chop()函数讲解
Feb 11 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
Jun 03 PHP
再谈Yii Framework框架中的事件event原理与应用
Apr 07 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
May 09 #PHP
PHP新手入门学习方法
May 08 #PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
May 07 #PHP
php 大数据量及海量数据处理算法总结
May 07 #PHP
php 截取字符串并以零补齐str_pad() 函数
May 07 #PHP
php调用mysql数据 dbclass类
May 07 #PHP
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
May 07 #PHP
You might like
php中的一个中文字符串截取函数
2007/02/14 PHP
php 8小时时间差的解决方法小结
2009/12/22 PHP
使用GD库生成带阴影文字的图片
2015/03/27 PHP
Laravel实现定时任务的示例代码
2017/08/10 PHP
laravel 解决路由除了根目录其他都404的问题
2019/10/18 PHP
js同时按下两个方向键
2007/12/01 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
2014/06/05 Javascript
jquery中$(#form :input)与$(#form input)的区别
2014/08/18 Javascript
Javascript动态创建div的方法
2015/02/09 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
javascript实现列表滚动的方法
2015/07/30 Javascript
JS实现图片上传预览功能
2016/11/21 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
2016/11/25 Javascript
bootstrap fileinput 插件使用项目总结(经验)
2017/02/22 Javascript
Angularjs 动态添加指令并绑定事件的方法
2017/04/13 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
2018/01/16 Javascript
详解jQuery中的isPlainObject()使用方法
2018/02/27 jQuery
vue-cli与webpack处理静态资源的方法及webpack打包的坑
2018/05/15 Javascript
vue组件挂载到全局方法的示例代码
2018/08/02 Javascript
JavaScript中this的全面解析及常见实例
2019/05/14 Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
2019/12/04 Javascript
vue学习笔记之Vue中css动画原理简单示例
2020/02/29 Javascript
[01:51]2014DOTA2西雅图邀请赛 MVP 外卡赛black场间采访
2014/07/09 DOTA
Python字符串和文件操作常用函数分析
2015/04/08 Python
python查询sqlite数据表的方法
2015/05/08 Python
python3中int(整型)的使用教程
2017/03/23 Python
Python入门_浅谈字符串的分片与索引、字符串的方法
2017/05/16 Python
Python 读取指定文件夹下的所有图像方法
2018/04/27 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
2020/04/03 Python
Python实现壁纸下载与轮换
2020/10/19 Python
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
先进集体获奖感言
2014/02/13 职场文书
中学生打架检讨书
2014/10/13 职场文书
学校政风行风评议工作总结
2014/10/21 职场文书
MySQL Router实现MySQL的读写分离的方法
2021/05/27 MySQL