算法的数据库结构设计最为简单。category表中一个字段id,一个字段fid(父id)。这样可以根据WHERE id = fid来判断上一级内容,运用递归至最顶层
我们先查出数组
代码如下 | 复制代码 |
<?php $a = array( 'AAAAAA' => array( 'aaaaaa' => array( '111111', '222222', '333333' ), 'bbbbbb' => array( '111111', '222222', '333333' ), 'cccccc' => array( '111111', '222222', '333333' ), ), 'BBBBBB' => array( 'aaaaaa' => array( '111111', '222222', '333333' ), 'bbbbbb'=> array( '111111', '222222', '333333' ), 'cccccc'=> array( '111111', '222222', '333333' ), ), 'CCCCCC' => array( 'aaaaaa'=> array( '111111', '222222', '333333' ), 'bbbbbb'=> array( '111111', '222222', '333333' ), 'cccccc' => array( '111111', '222222', '333333' ), ), ); foreach ($a as $k=>$v){ echo $k."<br>"; // if(is_array($v)){ foreach($v as $key=>$val){ echo " ".$key."<br>"; // } if(is_array($val)){ foreach($val as $kkk=>$vall){ echo " ".$vall."<br>"; } } } echo "<br>"; } /*******mysql查询无限级分类的代码******/ /*** $sql = "SELECT a.Title AS big, b.Title AS small FROM largeTitle AS a LEFT JOIN smallTitle AS b ON a.ID=b.LargeID"; $a = array(); $r = mysql_query($sql); while( $arr = mysql_fetch_array($r)){ $a[$arr['big']] = $arr['small']; } ***/ ?> |
好了下面先读取数据库然后再递归读出
分类表,比如category,字段有 id,parentid,title
代码如下 | 复制代码 |
//查询 |
其它的方法,设置fid字段类型为varchar,将父类id都集中在这个字段里,用符号隔开,比如:1,3,6
这样可以比较容易得到各上级分类的ID,而且在查询分类下的信息的时候,
可以使用:SELECT * FROM category WHERE pid LIKE “1,3%”。
代码如下 | 复制代码 |
-- /** //获得root左边和右边的值 |
好了 只要这样所有的分类都可以一次性查询出来了,而不用通过递归了。
在php中要保存远程图片到自己服务器本地,我们需要先正则字符串中的内容图片,然后再利用相关函数把图片读取并保存到本地硬盘即可。代码如下 | 复制代码 |
<? } function save_img($str) preg_match_all('/<imgssrc=(http://.*?)(s(.*?)>|>)/i',$result,$matches); foreach($matches[1] as $value) // $url 是远程图片的完整URL地址,不能为空。 function GrabImage($url,$filename="") { $path="download/"; //指定存储文件夹 //若文件不存在,则创建; if($filename=="") { ob_start(); $fp2=@fopen($filename, "a"); return $filename; |
dedecms中图版保存到本地方法
代码如下 | 复制代码 |
if(!empty($saveremoteimg)) |
代码如下 | 复制代码 |
<?php |
1.对于一般的变量,把该变量变成php语言的格式,写到文件中,用时只要include这个文件就相当于加载了cache了;
2.对于array型的变量,把array转化为php语言定义array的字符串,写到文件中,用时也只要include就相当于加载了cache了;
3.缓存cache时间上的控制,通过获取缓存文件的创建时间和现在的时间进行对比,如果没有到更新时间,直接读取缓存,如果到了更新时间,查询数据库,
文件缓存类:
代码如下 | 复制代码 |
<?php |
调用方法
代码如下 | 复制代码 |
/** |
memcache来缓存数据
面提供这个文件缓存的类,希望大家可以看看。
代码如下 | 复制代码 |
<?php /** } ?> |
方法一,在php页面设置时区
在页面最前面加上下面应用一种都是可以的
date_default_timezone_set用法如下
date_default_timezone_set
(PHP 5 >= 5.1.0RC1)
date_default_timezone_set -- 设定用于一个脚本中所有日期时间函数的默认时区
说明
bool date_default_timezone_set ( string timezone_identifier )
date_default_timezone_set() 设定用于所有日期时间函数的默认时区。
用法
代码如下 | 复制代码 |
1 date_default_timezone_set('Asia/Shanghai');//'Asia/Shanghai' 亚洲/上海 2 date_default_timezone_set('Asia/Chongqing');//其中Asia/Chongqing'为“亚洲/重庆” 3 date_default_timezone_set('PRC');//其中PRC为“中华人民共和国” 4 ini_set('date.timezone','Etc/GMT-8'); 5 ini_set('date.timezone','PRC'); 6 ini_set('date.timezone','Asia/Shanghai'); 7 ini_set('date.timezone','Asia/Chongqing'); |
Asia/Shanghai – 上海
Asia/Chongqing – 重庆
Asia/Urumqi – 乌鲁木齐
Asia/Hong_Kong – 香港
Asia/Macao – 澳门
Asia/Taipei – 台北
Asia/Singapore – 新加坡
如果你有服务器管理权限,我们可以在在PHP.INI中设置时区
代码如下 | 复制代码 |
date.timezone = PRC |
去掉前面的分号 然后重启apache
可能碰到的一些问题
1.Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function.
2.Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function.
3.Notice: date_default_timezone_set(): Timezone ID 'Asia/Shanghai' is invalid
解决办法
代码如下 | 复制代码 |
date_default_timezone_set('Asia/Shanghai');//'Asia/Shanghai' 亚洲/上海 date_default_timezone_set('Asia/Chongqing');//其中Asia/Chongqing'为“亚洲/重庆” date_default_timezone_set('PRC');//其中PRC为“中华人民共和国” |