时间:2012年05月17日作者:锋叔 查看次数: 8评论次数:0
递归其实就是"一个函数的自调用".
在这个"自调用"的过程中,必须要有一个变化的"参数",当这个"参数"达到你的期望值的时候,终止该"自调用"过程.
.jpg)
例如在此多级分类中,我们想得到"落地扇"的最上级分类"家用电器"的id,就可以应用到递归思想,不断向上追溯上级分类,直到期望的结果出现,即找到第一级分类
以此为例子编写递归程序:
$myID=getTopID('43');
function getTopID($id){
$query= mysql_query("select * from cate where id='".$id."'");
$Rs = mysql_fetch_array($query);
$topID=$Rs['id'];/////先赋值
if($Rs['parentid']>0){ ////判断是否己是顶级分类,因为parentid等于0才是第一级分类,所以没达到条件的话,再调用函数自身,往上再查找
$topID = getTopID($Rs['parentid']);///根据设计时的思路,用父级的id作为子级的parentid查找
}
return $topID;///返回顶级分类的id
}
这便是递归思想的简单应用了.
时间:2012年05月17日作者:锋叔 查看次数: 9评论次数:0
在开发应用中,经常遇到一级分类,二级分类.....无限级分类等开发需求.例如某产品系统中:
如图:
.jpg)
思路:既然有下级分类,我们就称它为子类,子类必然上面有一个父类,所以先定义一个字段用来标识这个"子"的父类是谁,假设是:parentid
如果该类别没有父类,即第一级分类,那么把parentid值设为0.
按照规律,肯定是先有第一级分类,才有下级分类的,而新增了第一级分类后,必定有唯一标识id,于是我们可以借助这个唯一的标识,用来当作它的下级分类parentid的值,所以parentid值等于这个id的,将全部是它的子类
如图:
.jpg)
这样就简单地实现了无限级分类的应用
时间:2012年05月16日作者:锋叔 查看次数: 13评论次数:0
在编程过程中,有时候会遇到用echo来输出大段的html或者javascript脚本的情况
如果用传统的输出方法,肯定要有大量的转义符来对字符串中的引号等特殊字符进行转义,难免会出现语法错误。特别是在字符多的时候,用PHP定界符则可解决这个"繁琐"的问题.
PHP定界符的作用就是按照原样,输出在其内部的东西且在PHP定界符中的任何特殊字符都不需要转义.
PHP中的定界符格式是这样的:
<<<Eof
...内容
Eof;
其中有需要注意的地方:
首先在<<<之后的字符Eof是自己定义的,随便什么都是可以的(比如END都可以),但是结尾处的字符一定要和它一样,必须是成对出现的.
结尾的一行(如上例的Eof;),一定要另起一行,并且这一行行除了Eof;这个定界符结尾标识之外不能有任何其他字符,前后都不能有,否则会提示你语法错误.
还有要注意的是,如果在定界符中间出现有PHP的变量,你只需要像在其它字符串中输出一样写就行了,例如
<<<Eof
hello{$name}
Eof;
这样编写是错误的:
<<<Eof
hello<?php echo $name?>
Eof;
时间:2012年05月15日作者:锋叔 查看次数: 18评论次数:0
$str=array('24','3','6','50');
/*冒泡排序(数组排序)
冒泡排序的原理:再给出的一组数字中,从前往后两两比较,每一次把较大的数放在后面,再进行下一次比较。*/
function bubble_sort($array)
{
$count = count($array);
if ($count <= 0) return false;
for($i=0; $i<$count; $i++){
for($j=$count-1; $j>$i ; $j--){
if ($array[$j] < $array[$j-1]){
$tmp = $array[$j];
$array[$j] = $array[$j-1];
$array[$j-1] = $tmp;
}
}
}
return $array;
}
/*
快速排序(数组排序)
快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。*/
function quick_sort($array)
{
if (count($array) <= 1) return $array;
$key = $array[0];
$left_arr = array();
$right_arr = array();
for ($i=1; $i<count($array); $i++){
if ($array[$i] <= $key)
$left_arr[] = $array[$i];
else
$right_arr[] = $array[$i];
}
 
时间:2012年05月15日作者:锋叔 查看次数: 21评论次数:0
需求:客户希望网站浏览者留言后,能同时发送邮件去通知站长查看,及时处理浏览者的问题.
处理:
////简单留言系统,数据插入,此处略去
......
//数据处理完后,紧接着邮件的发送
$MailBody="用户:{$_POST['u_username']}在您网站留言了";////邮件的主体内容
$MailBody=@iconv("UTF-8", "gb2312", $MailBody);////范例网站使用的是utf-8编码,这里不转码的话,发送的邮件会乱码
require("sendMail.php");
$smtpserver = "smtp.163.com"; //你选择的SMTP服务器,这里以163的为例子
$smtpserverport =25; //SMTP服务器端口
$smtpusermail = "xx@163.com"; //SMTP服务器的用户邮箱
$smtpemailto = 'xxyy@qq.com'; ///收件人邮箱
$smtpuser = "xx@163.com"; //SMTP服务器的用户帐号
$smtppass = "abcd123"; //SMTP服务器的用户密码
$mailsubject=@iconv("UTF-8", "gb2312", "用户留言通知");//邮件的主题,同样也要转码,否则产生乱码
$mailbody = $MailBody; //邮件内容
$mailtype = "HTML"; //邮件格式(HTML/TXT),TXT为文本邮件
$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//true表示使用身份验证,否则不使用身份验证.
$smtp->debug = FALSE; //是否显示发送的调试信息 TRUE发送 FALSE不发送
$smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $ma
时间:2012年05月15日作者:锋叔 查看次数: 21评论次数:0
记录用户的IP,方便跟踪相关的信息,也是很必要的.
采用以下函数:
function get_ip(){
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");
else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");
else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip = $_SERVER['REMOTE_ADDR'];
else
$ip = "unknown";
return($ip);
}
$ip=get_ip();
////然后可适当的记录,例如用户登录时的IP,留言时用户的
时间:2012年05月15日作者:锋叔 查看次数: 19评论次数:0
注册新用户时,由于用户名可能会重复.为避免当用户填完一大堆信息后,提交注册表单,方提示用户名己存在,产生不好的用户体验.所以有必要在用户填写完想要注册的用户名后,即时提示是否合法或是否己注册等信息.
下面用thinkPHP的ajax举例:
先包含几个js文件
<script src="/Public/Js/tabs.js"></script>
<script src="/Public/Js/Base.js" language="javascript" type="text/javascript"></script>
<script src="/Public/Js/prototype.js" language="javascript" type="text/javascript"></script>
<script src="/Public/Js/mootools.js" language="javascript" type="text/javascript"></script>
<script src="/Public/Js/Ajax/ThinkAjax.js" language="javascript" type="text/javascript"></script>
<script language="javascript">
function checkUser(){
ThinkAjax.send('/User/chkUser','ajax=1&username='+$('#username').value,'','result');
}
</script>
//id="result"是用于显示返回的信息
<div id="result" class="none result" style="font-family:微软雅黑,Tahoma;letter-spacing:2px"></div>
<input name=&q
时间:2012年05月14日作者:锋叔 查看次数: 20评论次数:0
mysql有rand()来执行随机数据查询,最简单的就这样:SELECT * FROM `Product` ORDER BY RAND() LIMIT 6
但是如果数据量到一定时,执行速度非常慢,特别是百万级数据的情况下更是痛苦。
通过优化执行,执行速度明显提高:
SELECT * FROM `Product`
WHERE id >= (SELECT floor(RAND() * (SELECT MAX(id) FROM `Product`)))
ORDER BY id LIMIT 6;