首页
网站首页
公司简介
资讯中心
推荐内容
返回顶部
mysql实现无限级分类,Benchmarking之Timer实现PHP程序计时
发布时间:2019-12-29 02:48
浏览次数:

一.正则表达式1.匹配符 1)头匹配符^:如^0754,只匹配开头为0754的字符串 2)尾匹配符$:如0754$,只匹配结尾为0754的字符串 3)全字匹配:将^和$结合,如^0754$,匹配0754字符串2.转义字符 1)空字符: 换行/n 回车/r 制表符/t 2)其他字符: $ /$ ^ /^ + /+ / //3.通配符 1)*号:用来匹配前面一个字符是否在字符串中出现零次或多次. 例1:'abc*',匹配含有ab的所有字符串。 2)+号:......................................一次或多次. 例2:'abc+',匹配含有abc的所有字符串。 3)?号:......................................零次或一次. 例3:只匹配含有ab、abc结尾不再含c的字符串。如abca,aabc,aaab都可以,但abcc就不行。4.关于转义字符/$与双、单引号(php4环境) 1)正则表达式本身就是一个字符串。 2)当引号中含有$时,用双、单引号定义就有区别,区别如下: (1)使用单引号定义时,解释器会把引号内所有字符(包括$在内)都原封不动的赋值给字符串变量。 (2)使用双引号定义时,解释器会把引号内$字符以及其后的合法字符(字母、数字、下划线)翻译成变量,直到遇到一个非法字符才认为变量名结束,该非法字符及其后面的字符都被视为一般字符赋给字符串变量,直到遇到下一个$为止。 (3)注意:单个$出现在双引号的尾部,并且其后面不再有任何字符的时候,解释器不会将其翻译成变量。也不需要加转义/,当然不提倡。 (4)如果待匹配的字符中本身就有$,就无法用双引号来定义这个正则表达式,原因是转义字符/$在单,双引号中表示的意义不同: 1双引号中,/$和单个的$意义是一样的,都是代表尾匹配符,因此c/$$=c/$=c/$/$=c$=c/$/$;双引号中,/$在任何时刻都只代表一个字符$,echo c/$$结果是c$$,并且/$和单个的$(单个的$是指该$无法和其后字符组成变量名)是完全等效的,都是尾匹配符,所以双引号中是无法写入作为非尾匹配字符的字符$的,也正是这个原因,大多数需要匹配$时定义正则表达式只能用''。 2单引号中,/$的意义仅仅表示字符$,尾匹配符是$,不管后面是否有合法变量名字符;单引号中,/$其实是两个字符,如不用于正则匹配将没有任何意义,echo 'c/$$'结果仍是c/$$。单作为正则表达式来使用,单引号中的/$表示的是特殊字符$,而尾匹配符就是单独的$字符。 3)正则表达式的尾匹配符$和变量的定义符是相同的: 例1:定义正则表达式为^ab$:$pattern=^ab/$;转义字符/$在双引号中就表示字符$,结果是^ab$。 例2:如上题,使用$pattern=^ab$;显然是错误的,但是由于$在尾部,后面没有其他字符,所以依然适用。 例3:以字符组合c$结尾的正则表达式:$pattern='c/$$'; 例4:如上题,$pattern=c/$$;正则表达式将/$视为尾匹配符,故只匹配以c结尾

无限级分类,主要是通过储存上级分类的id以及分类路径来实现。由于数据的结构简单,所以要将分类的关系由树状显示,我只能想到用递归的方式给于实现,下面是分类数据表结构和自己写的一个树状显示函数,有什么不妥的地方希望大家能指出。 表结构:id字段为分类标识,name字段为分类名,father_id字段为所属父分类的id,path字段为分类路径,isdir判断是否是目录。 显示函数://$count为分类等级 sort_list($str,$fatherid,$count) { $rs = $this-sql-re_datas("select * from sort where father_id = fatherid"); $num = $this-sql-sql_numrows(); $i=0; $n = 1; while(isset($rs[$i])) { $name = ""; for($n = 1 ; $n $count ; $n ) { $name.="│ "; } if($i 1==$num) { $name.="└─".$rs[$i][name]; } else { $name.="├─".$rs[$i][name]; } if($rs[$i][isdir]) { $str.="span style='color:#CCCCCC'".$name."/span"; } else { $str.=$name"; } $temp = $count 1; $str = $this-sort_list($str,$rs[$i][id],$temp); $i ; } return $str; } 其中$this-sql对象为sql操作类对象,re_datas()函数返回查到的数组,sql_numrows()函数返回查询到的数目 调用方法:$sort_list = sort_list($sort_list,0,1); 以上为个人思想,还望大家多多指点。by 5w台灯

PHP ADODB 1.99版手册中文翻译翻译作者:Tripc修正作者:heiyeluren----------------------------------------------修正说明:因为之前的版本是台湾版的,所以很多语句不符合大陆的使用习惯,于是我稍微用Editplus修正了一下,希望给学习ADODB的同志们一个参考。(heiyeluren修正于2005-6-22)ADODBPHP 在数据库的支持上是很令人称道的,几乎所有的知名数据库系统都有对应的函数群支持,而且支持的很完整。但很不幸的,每一群数据库支持函数无论在名称或参数结构上,都有很大的差异,这使得PHP的系统开发者在面临更换数据库时,总会觉得痛苦万分。难道这个问题就没有解决方法吗?呵呵,当然有,答案就是我现在要介绍的 ADODB 这个PHP物件。ADODB提供了完整的方法和属性让工程师去控制数据库系统,更棒的是你只要记得它的功能就好了,因为不同的数据库系统,只要修改一个属性值就可以了,ADODB会自动依据设定取用正确的PHP函数。此外,最多再配合数据库系统修改修改SQL指令,你的PHP系统就可以在最短的时间内更换到另一个数据库系统了,如果在编写程序时,对SQL指令能做妥善规划,那就更快了。经过以上的介绍,相信你已经对ADODB的功用有所了解,以下为ADODB的详细介绍。取得ADODB你可以在 取得最新版的ADODB。我在编写本文时,最新版本是1.99版,版权采BSD-Style及LGPL双轨制,换句话就是Freeware,没有什么限制。但在取得ADODB后,最好还是要看一下相关版权说明及用法,并和本文对照一下,以免错误。使用ADODB基本上使用ADODB是相当容易的,取得压缩文件后解开,我建议将整个内容都解到ADODB的目录里。然后你可以一边参考本文,一边研究里面的范例,就放在里面的test目录下。由于ADODB附上的说明十分完整详实,以下的说明大部份来自ADODB的readme.htm,这里不是全部的内容,我把一些我认为没有用的内容都去掉了,像版本差异说明、何编写支持ADODB的驱动程序等与应用无关的部份。想要了解全部内容的读者还是可以自己去参考 readme.htm。--------------------------------------------------------------------------------简介特色安装启动ADODBADONewConnectionNewADOConnection支持的数据库学习手册范例 1 : Select范例 2 : 进阶 Select范例 3 : Insert范例 4 : 除错及 rs2html 范例范例 5 : MySQL 及选单范例 6 : 一次连接两个数据库范例 7 : 产生更新及新增的SQL指令范例 8 : 用下一笔及上一笔实作卷动客制化错误处理及PEAR错误数据集快取参考手册ADOConnection连接数据库:Connect PConnect执行SQL:Execute CacheExecute SelectLimit CacheSelectLimit Prepare PrepareSP GetOne GetRow产生 更新/新增:GetUpdateSQL GetInsertSQLBLOB : UpdateBlob UpdateClob UpdateBlobFile换页/卷页 : PageExecute CachePageExecute清除 : CacheFlush Close交易 : BeginTrans CommitTrans RollbackTrans提取数据 : $ADODB_FETCH_MODE BlankRecordSet字串 : Concat qstr日期 : DBDate DBTimeStamp UnixDate UnixTimeStamp列管理器 : Affected_Rows Insert_ID GenID错误处理 : ErrorMsg ErrorNo数据辞典 : MetaDatabases Meta

//创建一个对象 $timer = new Benchmark_Timer(); //计时开始 $timer-start(); //测试的一段脚本 for ($i=0; $i1000; $i++) { //we do nothing here } //设置标记 $timer-setMarker(Mark1); //输出两点之间的用时 echo $timer-timeElapsed(Start, Mark1); ? 然后执行之,就可以得到0.000543这样的结果,大致为从开始到Mark1点之间的耗时.类方法方法:Benchmark_Timer( [mixed $auto = false]) 描述:构造器,开始计时器记录.参数:boolean $auto,缺省为false,如果设定为true的话,则会自动打印计时器结果.形如下表 time index ex time %Start 1099020859.80505200 - 0.00%Stop 1099020859.80595000 0.000898 100.00%total - 0.000898 100.00%分别列出开始/终止的时间索引,与上一标记之间的运行时间,与上一标记之间的运行时间占总耗时的百分比(所以Stop点一直为100%),以及总耗时. 方法: display( ) 描述:打印由getOutput方法返回的信息. 形如下表: time index ex time %Start 1099021292.32145600 - 0.00%Mark1 1099021292.32202000 0.000564 46.38%Mark2 1099021292.32209700 0.000077 6.33%Stop 1099021292.32267200 0.000575 47.29%total - 0.001216 100.00%列出每一标记的时间索引,与上一标记之间的运行时间,与上一标记之间的运行时间占总耗时的百分比,以及总耗时.调用该方法前,应该先调用stop()来终止计时(并不会终止程序).见例2. 方法: getOutput( ) 描述:返回格式化后的计时器信息. 该方法把计时器信息放如一个表中(如上表),供display()方法列出.方法:getProfiling( ) 描述:返回计时器信息.将是形如Array ( [0] = Array ( [name] = Start [time] = 1099021787.69669100 [diff] = - [total] = 1099021787.696691 ) [1] = Array ( [name] = Mark1 [time] = 1099021787.69675900 [diff] = 0.000068 [total] = 1099021787.696759 ) [2] = Array ( [name] = Mark2 [time]

友情链接: 网站地图
Copyright © 2015-2019 http://www.nflfreepicks.net. 新葡萄京娱乐场网址有限公司 版权所有