PHP中的递归思想,递归应用

时间:2012年05月17日作者:锋叔 查看次数: 8评论次数:0

递归其实就是"一个函数的自调用".
在这个"自调用"的过程中,必须要有一个变化的"参数",当这个"参数"达到你的期望值的时候,终止该"自调用"过程.

 

例如在此多级分类中,我们想得到"落地扇"的最上级分类"家用电器"的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
 }
   
这便是递归思想的简单应用了.

标签:PHP递归思想  递归   分类:PHP编程

PHP 简单实用的无限级分类设计思路

时间:2012年05月17日作者:锋叔 查看次数: 9评论次数:0


在开发应用中,经常遇到一级分类,二级分类.....无限级分类等开发需求.例如某产品系统中:
 
如图:

思路:既然有下级分类,我们就称它为子类,子类必然上面有一个父类,所以先定义一个字段用来标识这个"子"的父类是谁,假设是:parentid

如果该类别没有父类,即第一级分类,那么把parentid值设为0.

按照规律,肯定是先有第一级分类,才有下级分类的,而新增了第一级分类后,必定有唯一标识id,于是我们可以借助这个唯一的标识,用来当作它的下级分类parentid的值,所以parentid值等于这个id的,将全部是它的子类

如图:

 

这样就简单地实现了无限级分类的应用

PHP定界符的使用,PHP原样输出内容

时间: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;

标签:PHP定界符  PHP原样输出内容   分类:PHP编程

PHP算法之冒泡排序和快速排序算法例子

时间: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];
   }
  

标签:PHP算法  PHP排序  冒泡排序  快速排序   分类:PHP编程

PHP发送邮件,PHPemail发送代码

时间: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

标签:PHP发送邮件  PHP email   分类:PHP编程

php获取用户IP

时间: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,留言时用户的

标签:php获取ip  获取用户ip   分类:PHP编程

PHP,ajax无刷新检测用户名是否存在

时间: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

标签:thinkPHP ajax  ajax检查用户名   分类:PHP编程

mysql随机查询及优化

时间: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;

25条记录   上一页 1234下一页