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 相关文章推荐
php在线生成ico文件的代码
Oct 09 PHP
php 攻击方法之谈php+mysql注射语句构造
Oct 30 PHP
PHP5中新增stdClass 内部保留类
Jun 13 PHP
php 多关键字 高亮显示实现代码
Apr 23 PHP
PHP 透明水印生成代码
Aug 27 PHP
PHP不用递归遍历目录下所有文件的代码
Jul 04 PHP
Codeigniter检测表单post数据的方法
Mar 21 PHP
为你总结一些php系统类函数
Oct 21 PHP
ThinkPHP 模板substr的截取字符串函数详解
Jan 09 PHP
php中类和对象:静态属性、静态方法
Apr 09 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
Jun 05 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中对数据库操作的封装
2006/10/09 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
2014/06/19 PHP
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
php实现读取手机客户端浏览器的类
2015/01/09 PHP
PHP里的单例类写法实例
2015/06/25 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
2015/10/20 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
2016/04/04 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
2016/05/18 PHP
Yii CGridView用法实例详解
2016/07/12 PHP
关于实现代码语法标亮 dp.SyntaxHighlighter
2007/02/02 Javascript
Javascript模块模式分析
2008/05/16 Javascript
Prototype使用指南之selector.js说明
2008/10/26 Javascript
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
多种方法实现JS动态添加事件
2013/11/01 Javascript
jQuery的图片滑块焦点图插件整理推荐
2014/12/07 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
2017/06/16 Javascript
ES6学习笔记之map、set与数组、对象的对比
2018/03/01 Javascript
angular.js实现列表orderby排序的方法
2018/10/02 Javascript
vue-resource:jsonp请求百度搜索的接口示例
2019/11/09 Javascript
使用Python的Twisted框架编写非阻塞程序的代码示例
2016/05/25 Python
深入学习Python中的装饰器使用
2016/06/20 Python
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
一篇文章了解Python中常见的序列化操作
2019/06/20 Python
使用Python调取任意数字资产钱包余额功能
2019/08/15 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
2020/06/17 Python
如何清空python的变量
2020/07/05 Python
欧洲最大的笔和书写专家:The Pen Shop
2017/03/19 全球购物
AP澳洲中文网:澳洲正品直邮,包税收件无忧
2019/07/12 全球购物
后勤人员自我鉴定
2013/10/20 职场文书
班组长岗位职责范本
2014/01/05 职场文书
商场主管竞聘书
2014/03/31 职场文书
工商管理专业自荐信
2014/06/03 职场文书
谢师宴邀请函
2015/02/02 职场文书
大学自主招生自荐信(2016精选篇)
2016/01/28 职场文书