第3章 PHP常用内置函数 为便于各类应用的开发,PHP提供了极为丰富的各种内置函数。适当使用PHP的内 置函数,既可简化PHP程序代码的编写,又可方便地实现所需要的有关功能。本章主要对 PHP Web应用开发中常用的一些内置函数进行简要介绍,包括数学函数、字符串处理函 数、日期和时间函数、文件操作函数、检测函数等。 3.1 数学函数 数学函数主要用于实现各种数学运算,或对有关的数值进行相应的处理。PHP所提供 的数学函数是十分全面的,常用的有abs()、floor()、ceil()、round()、rand()、pow()与 sqrt()等。 1.abs()函数 abs()为绝对值函数,其语法格式为 number abs(mixed $value) 参数:value用于指定要处理的数值,其类型为mixed(即可以接受多种不同的类型)。 返回值:value的绝对值,其类型为number(即integer或float)。若参数value的类型 为float,则返回值的类型也为float,否则为integer。 【例3.1】 abs()函数应用示例(math01.php)。 "; echo "abs(0)=".abs(0)."
"; echo "abs(-1)=".abs(-1)."
"; echo "abs(-1.5)=".abs(-1.5)."
"; ? > 视频讲解 4 2 该示例的运行结果如图3.1所示。 图3.1 程序math01.php的运行结果 2.floor()与ceil()函数 floor()与ceil()均为取整函数,其语法格式为 float floor(float $value) float ceil(float $value) 参数:value用于指定要处理的数值,其类型为float。 返回值:value经过取整后的值,其类型为float型。其中,floor()函数采用舍去法取 整,返回不大于value的最接近的整数;ceil()函数则采用进一法取整,返回不小于value的 下一个整数。 【例3.2】 floor()与ceil()函数应用示例(math02.php)。 "; echo "floor(9.99)=".floor(9.99)."
"; echo "floor(-3.14)=".floor(-3.14)."
"; echo "ceil(3.14)=".ceil(3.14)."
"; echo "ceil(9.99)=".ceil(9.99)."
"; echo "ceil(-3.14)=".ceil(-3.14)."
"; ? > 该示例的运行结果如图3.2所示。 图3.2 程序math02.php的运行结果 43 3.round()函数 round()为四舍五入函数,其语法格式为 float round(float $value[,int $precision=0]) 参数:value用于指定要处理的数值;precision(可选)用于指定四舍五入的精度(即十 进制小数点后数字的数目),可以是正数、负数或零(默认值)。 返回值:value按精度precision四舍五入后的值,其类型为float。 【例3.3】 round()函数应用示例(math03.php)。 "; echo "round(125.456,1)=".round(125.456,1)."
"; echo "round(125.456,0)=".round(125.456,0)."
"; echo "round(125.456,-1)=".round(125.456,-1)."
"; echo "round(125.456,-2)=".round(125.456,-2)."
"; echo "round(125.456)=".round(125.456)."
"; ? > 该示例的运行结果如图3.3所示。 图3.3 程序math03.php的运行结果 4.rand()函数 rand()为随机整数函数,其语法格式为 int rand([int $min,int $max]) 参数:min(可选)用于指定最小值,默认为0;max(可选)用于指定最大值,默认为 getrandmax(),即随机整数最大的可能值。 返回值:返回min与max之间(包括min与max)的伪随机整数。未指定min与max 时,则返回0与getrandmax()之间的伪随机整数。 【例3.4】 rand()函数应用示例(math04.php)。 "; echo "rand()=".rand()."
"; echo "rand()=".rand()."
"; 4 4 echo "rand(1,100)=".rand(1,100)."
"; echo "rand(1,100)=".rand(1,100)."
"; echo "rand(1,100)=".rand(1,100)."
"; ? > 该示例的运行结果如图3.4所示。 图3.4 程序math04.php的运行结果 5.pow()函数 pow()函数为乘方函数,其语法格式为 number pow(number $base, number $exp) 参数:base用于指定底数,exp用于指定指数。 返回值:base的exp次幂。 【例3.5】 pow()函数应用示例(math05.php)。 "; echo "pow(2,0)=".pow(2,0)."
"; echo "pow(2,3)=".pow(2,3)."
"; echo "pow(2,-3)=".pow(2,-3)."
"; echo "pow(-2,3)=".pow(-2,3)."
"; echo "pow(-2,-3)=".pow(-2,-3)."
"; ? > 该示例的运行结果如图3.5所示。 图3.5 程序math05.php的运行结果 45 6.sqrt()函数 sqrt()函数为平方根函数,其语法格式为 float sqrt(float $value) 参数:value用于指定要处理的数值。 返回值:value的平方根。若value为负数,则返回NAN。 【例3.6】 sqrt()函数应用示例(math06.php)。 "; echo "sqrt(100)=".sqrt(100)."
"; echo "sqrt(-100)=".sqrt(-100)."
"; echo "sqrt(101)=".sqrt(101)."
"; echo "sqrt(2.25)=".sqrt(2.25)."
"; ? > 该示例的运行结果如图3.6所示。 图3.6 程序math06.php的运行结果 3.2 字符串处理函数 字符串处理函数主要用于对字符串进行相应的处理。PHP所提供的字符串处理函数 是相当丰富的,常用的有strlen()、trim()、substr()、strtoupper()、strtolower()、strcmp() 与str_replace()等。 1.strlen()函数 strlen()函数用于获取字符串的长度(即字符串中所包含的字符的个数),其语法格 式为 int strlen(string str) 参数:str用于指定需要计算其长度的字符串。 返回值:字符串str的长度。若str为空,则返回0。 视频讲解 4 6 【例3.7】 strlen()函数应用示例(string01.php)。 "; $str="Hello, World!"; echo strlen($str)."
"; ? > 该示例的运行结果如图3.7所示。 图3.7 程序string01.php的运行结果 2.trim()函数 trim()函数用于删除字符串首尾处的空白字符(或指定字符),其语法格式为 string trim( string str[, string charlist]) 参数:str用于指定需要处理的字符串;charlist(可选)用于指定需要删除的字符,既可 逐一列出,也可使用“..”列出一个字符范围。若不指定charlist参数,则表示要删除空白字 符,包括普通空格符("")、制表符("\t")、换行符("\n")、回车符("\r")、空字节符("\0")与 垂直制表符("\x0B")。 返回值:删除了首尾处空白字符(或指定字符)的字符串。 说明:如果只要删除字符串开头或末尾的空白字符(或指定字符),那么可分别使用 ltrim()或rtrim()函数。这两个函数的语法格式与使用方法类似于trim()函数。 【例3.8】 trim()函数应用示例(string02.php)。 "; $str=trim($str); echo strlen($str)."
"; echo $str."
"; $str=trim($str,"#."); echo $str."
"; ? > 该示例的运行结果如图3.8所示。 47 图3.8 程序string02.php的运行结果 3.substr()函数 substr()函数用于获取字符串的子串,其语法格式为 string substr(string str, int start[, int length]) 参数:str用于指定需要从中获取子串的字符串;start用于指定子串开始的位置(从0 开始计算);length(可选)用于指定子串的长度。未指定length参数时,表示子串从位置 start处开始直到字符串结尾。 返回值:成功时返回字符串str从位置start处开始最大长度为length的子串,失败时 返回FALSE。特别地,若length值为0、FALSE或NULL,则返回一个空字符串。 说明:若参数start为负数,则表示从倒数第start个字符开始;若参数length为负数, 则表示忽略字符串末尾的length个字符(即提取到倒数第length个字符止)。 【例3.9】 substr()函数应用示例(string03.php)。 "; echo substr($str,6,5)."
"; echo substr($str,6)."
"; echo substr($str,-6)."
"; echo substr($str,-6,5)."
"; echo substr($str,-6,-5)."
"; ? > 该示例的运行结果如图3.9所示。 图3.9 程序string03.php的运行结果 4 8 4.strtoupper()与strtolower()函数 strtoupper()与strtolower()函数用于将字符串中的所有字母转换为大写或小写,其语 法格式为 string strtolower(string $str) string strtoupper(string $str) 参数:str用于指定需要处理的字符串。 返回值:strtoupper()函数返回转换后的大写字符串,strtolower()函数返回转换后的 小写字符串。 【例3.10】 strtoupper()与strtolower()函数应用示例(string04.php)。 "; echo $str1."
"; echo $str2."
"; ? > 该示例的运行结果如图3.10所示。 图3.10 程序string04.php的运行结果 5.strcmp()函数 strcmp()函数用于比较两个字符串的大小,其语法格式为 int strcmp(string str1, string str2) 参数:str1用于指定第一个字符串;str2用于指定第二个字符串。 返回值:若str1大于str2,则返回值大于0;若str1小于str2,则返回值小于0;若str1 等于str2,则返回值为0。 【例3.11】 strcmp()函数应用示例(string05.php)。 0) echo "$str1>$str2"; elseif (strcmp($str1,$str2)==0) echo "$str1=$str2"; else echo "$str1<$str2"; ? > 该示例的运行结果如图3.11所示。 6.str_replace()函数 str_replace()函数用于实现字符串子串的替换,其基本的语法格式为 string str_replace(string search, string replace, string str) 参数:search用于指定需要替换的子串,replace用于指定替换后的子串,str用于指定 需要处理的字符串。 返回值:替换后的字符串。 【例3.12】 str_replace()函数应用示例(string06.php)。 "; echo $str."
"; $str=str_replace("学生","教师",$str); echo "替换后:
"; echo $str."
"; ? > 该示例的运行结果如图3.12所示。 图3.11 程序string05.php的运行结果图3.12 程序string06.php的运行结果 3.3 日期和时间处理函数 日期和时间处理函数主要用于获取相应的日期与时间,或对日期与时间进行相应的处 理(如格式化等)。PHP 提供了一系列日期与时间处理函数,常用的有time()、date()、 视频讲解 5 0 getdate()、mktime()与checkdate()等。 1.time()函数 time()函数用于获取当前的UNIX时间戳,其语法格式为 int time() 返回值:当前的UNIX 时间戳,即从UNIX 纪元(格林尼治时间1970 年1 月1 日 00:00:00)到当前时间的秒数。 2.date()函数 date()函数用于对时间/日期进行格式化,其语法格式为 string date(string format[, int timestamp]) 参数:format用于指定所使用的格式字符串(其中可包含的常用格式字符如表3.1所 示);timestamp(可选)用于指定需要进行格式化的UNIX时间戳。未指定timestamp参数 时,则默认为当前的本地时间,即time()函数的返回值。 表3.1 format参数中的常用格式字符 格式字符说 明 a 小写的上午和下午值(am 或pm) A 大写的上午和下午值(AM 或PM) d 月份中的第几天,有前导零的两位数字(01~31) D 星期中的第几天,文本表示,三个字母(Mon~Sun) F 月份,完整的文本格式(January~December) g 小时,12小时格式,没有前导零(1~12) G 小时,24小时格式,没有前导零(0~23) h 小时,12小时格式,有前导零(01~12) H 小时,24小时格式,有前导零(00~23) i 有前导零的分钟数(00~59) j 月份中的第几天,没有前导零(1~31) l 星期几,完整的文本格式(Sunday~Saturday) m 数字表示的月份,有前导零(01~12) M 三个字母缩写表示的月份(Jan~Dec) n 数字表示的月份,没有前导零(1~12) N 数字表示的星期中的第几天(PHP5.1.0新增,1~7,其中,1表示星期一,7表示星期日) s 秒数,有前导零(00~59) S 每月天数后面的英文后缀,两个字符(st、nd、rd或th) t 指定月份所应有的天数(28~31) 续表 51 格式字符说 明 T 本机所在的时区,如EST、MDT等 w 星期中的第几天,数字表示(0~6,其中,0表示星期天,6表示星期六) y 年份,两位数字(如96、06等) Y 年份,4位数字(如1996、2006等) z 年份中的第几天(0~366) 返回值:格式化后的日期时间字符串。若timestamp参数不是一个有效数值,则返回 FALSE。 【例3.13】 time()与date()函数应用示例(datetime01.php)。 "; echo date("Y-m-d",$now)."
"; echo date("H:i:s",$now)."
"; echo date("Y-m-d H:i:s",$now)."
"; echo date("Y 年m 月d 日H 时i 分s 秒",$now)."
"; echo date("l",$now)."
"; ? > 该示例的运行结果如图3.13所示。 图3.13 程序datetime01.php的运行结果 3.getdate()函数 getdate()函数用于获取日期/时间的信息,其语法格式为 array getdate([int timestamp]) 参数:timestamp(可选)用于指定需要获取其信息的UNIX时间戳。未指定timestamp参 数时,则默认为当前的本地时间,即time()函数的返回值。 返回值:一个包含日期/时间信息的关联数组(其键名如表3.2所示)。 5 2 表3.2 getdate()函数返回的关联数组的键名 键 名说 明 seconds 秒的数字表示(0~59) minutes 分钟的数字表示(0~59) hours 小时的数字表示(0~23) mday 月份中第几天的数字表示(1~31) wday 星期中第几天的数字表示(0~6,其中,0表示星期日,6表示星期六) mon 月份的数字表示(1~12) year 年份的数字表示(4位数字,如1996、2006等) yday 一年中第几天的数字表示(0~365) weekday 星期几的完整文本表示(Sunday~Saturday) month 月份的完整文本表示(January~December) 0 自UNIX纪元开始至今的秒数(系统相关,典型值为-2147483648~2147483647) 【例3.14】 getdate()函数应用示例(datetime02.php)。 "; echo $dtstr."
"; print_r($dtinfo); ? > 该示例的运行结果如图3.14所示。 图3.14 程序datetime02.php的运行结果 4.mktime()函数 mktime()函数用于获取一个日期/时间的UNIX时间戳,其语法格式为 int mktime([int hour[, int minute[, int second[, int month[, int day[, int year]]]]]]) 53 参数:hour、minute、second、month、day与year均为可选参数,分别用于指定小时数、 分钟数、秒数(一分钟之内)、月份数、天数与年份数(两位或四位数字,其中,0~69对应于 2000—2069,70~100对应于1970—2000)。参数可以从右向左省略,任何省略的参数会被 设置成本地日期和时间的当前值。 返回值:与参数所指定的日期和时间相对应的UNIX 时间戳。若参数非法,则返回 FALSE(在PHP5.1之前则返回-1)。 【例3.15】 mktime()函数应用示例(datetime03.php)。 "; echo $dtstr."
"; print_r($dtinfo); ? > 该示例的运行结果如图3.15所示。 图3.15 程序datetime03.php的运行结果 5.checkdate()函数 checkdate()函数用于检测一个日期的有效性(或合法性),其语法格式为 bool checkdate(int month, int day, int year) 参数:month用于指定月份数(1~12),day用于指定天数(1~31),year用于指定年份 数(1~32767)。 返回值:若参数所指定的日期有效(year值为1~32767,month值为1~12,day值在 相应年份与月份所应具有的天数范围之内),则返回TRUE,否则返回FALSE。 【例3.16】 checkdate()函数应用示例(datetime04.php)。 "; if (!checkdate($month,$day2,$year)) echo $year."-".$month."-".$day2."是一个无效日期.
"; ? > 该示例的运行结果如图3.16所示。 图3.16 程序datetime04.php的运行结果 3.4 文件操作函数 文件操作函数主要用于对文件进行相应的操作,如文件的创建、读取、写入、复制、重命 名与删除等。PHP提供了一系列的文件操作函数,常用的有fopen()、fclose()、fwrite()、 fgetc()、feof()、fgets()、file()、filesize()、fread()、copy()、rename()与unlink()等。 1.fopen()函数 fopen()函数主要用于打开一个文件,其基本的语法格式为 resource fopen(string filename, string mode) 参数:filename用于指定文件名,mode用于指定文件的打开方式(常用的文件打开方 式如表3.3所示)。 表3.3 常用的文件打开方式 打开方式说 明 r 以只读方式打开,将文件指针指向文件头 r+ 以读写方式打开,将文件指针指向文件头 w 以写入方式打开,将文件指针指向文件头并将文件大小截为零。若文件不存在,则尝试 创建 w+ 以读写方式打开,将文件指针指向文件头并将文件大小截为零。若文件不存在,则尝试 创建 a 以写入方式打开,将文件指针指向文件末尾。若文件不存在,则尝试创建 视频讲解 续表 55 打开方式说 明 a+ 以读写方式打开,将文件指针指向文件末尾。若文件不存在,则尝试创建 x 创建并以写入方式打开,将文件指针指向文件头。若文件已存在则打开失败,若文件不存 在,则尝试创建 x+ 创建并以读写方式打开,将文件指针指向文件头。若文件已存在,则打开失败,若文件不 存在,则尝试创建 rb 以只读方式打开(二进制模式),将文件指针指向文件头 rb+ 以读写方式打开(二进制模式),将文件指针指向文件头 wb 以写入方式打开(二进制模式),将文件指针指向文件头并将文件大小截为零。若文件不 存在,则尝试创建 wb+ 以读写方式打开(二进制模式),将文件指针指向文件头并将文件大小截为零。若文件不 存在,则尝试创建 ab 以写入方式打开(二进制模式),将文件指针指向文件末尾。若文件不存在,则尝试创建 ab+ 以读写方式打开(二进制模式),将文件指针指向文件末尾。若文件不存在,则尝试创建 xb 创建并以写入方式打开(二进制模式),将文件指针指向文件头。若文件已存在,则打开失 败,若文件不存在,则尝试创建 xb+ 创建并以读写方式打开(二进制模式),将文件指针指向文件头。若文件已存在,则打开失 败,若文件不存在,则尝试创建 返回值:成功时返回相应的文件指针,失败时返回FALSE。 2.fclose()函数 fclose()函数用于关闭一个已打开的文件,其语法格式为 bool fclose(resource handle) 参数:handle为文件指针(该文件指针指向欲关闭的文件)。 返回值:成功时返回TRUE,失败时返回FALSE。 【例3.17】 fopen()与fclose()函数应用示例(file01.php)。 "; die(); }e cho $fn."文件打开成功!
"; if(!fclose($fp)) { echo $fn."文件关闭失败!
"; die(); } 5 6 echo $fn."文件关闭成功!
"; ? > 该示例的运行结果如图3.17所示。 图3.17 程序file01.php的运行结果 3.fwrite()函数 fwrite()函数用于向文件写入内容,其语法格式为 int fwrite(resource handle, string str[, int length]) 参数:handle为文件指针(该文件指针指向要向其写入内容的文件);str用于指定需要 写入的内容,length(可选)用于指定写入内容的长度(或字节数)。 返回值:成功时返回写入内容的字节数(写入过程在已写入了length字节或者已写完 了str时停止),失败时返回FALSE。 【例3.18】 fwrite()函数应用示例(file02.php)。 "; die(); } $str="Hello,World!\n"; if (($n=fwrite($fp,$str))!=FALSE) echo "写入了".$n."字节的内容.
"; else echo "写入失败!
"; $str="你好,世界!\n"; if (($n=fwrite($fp,$str))!=FALSE) echo "写入了".$n."字节的内容.
"; else echo "写入失败!
"; fclose($fp); ? > 57 该示例的运行结果如图3.18所示。 图3.18 程序file02.php的运行结果 4.fgetc()函数 fgetc()函数用于从文件中读取一个字符,其语法格式为 string fgetc(resource handle) 参数:handle为文件指针(该文件指针指向要从其读取内容的文件)。 返回值:包含所读取到的一个字符的字符串。若已到达EOF,则返回FALSE。 【例3.19】 fgetc()函数应用示例(file03.php)。 "; die(); }w hile (($str=fgetc($fp))!=FALSE){ if ($str!="\n") echo $str; else echo "
"; }f close($fp); ? > 该示例的运行结果如图3.19所示。 5.feof()函数 feof()函数用于检测文件指针是否已到达文件末尾(EOF),其语法格式为 bool feof(resource handle) 参数:handle为文件指针。 返回值:文件指针已到达EOF时返回TRUE,否则返回FALSE。 5 8 图3.19 程序file03.php的运行结果 【例3.20】 feof()函数应用示例(file04.php)。 "; die(); }w hile (!feof($fp)){ $str=fgetc($fp); if ($str!="\n") echo $str; else echo "
"; }f close($fp); ? > 该示例的运行结果如图3.20所示。 图3.20 程序file04.php的运行结果 6.fgets()函数 fgets()函数用于从文件中读取一行,其语法格式为 string fgets(resource handle[, int length]) 59 参数:handle为文件指针(该文件指针指向要从其读取内容的文件);length(可选)用 于指定长度(或字节数)。未指定length参数时,则默认为1KB或1024B(从PHP4.3开始, 则忽略掉此假定,而改为至行末结束)。 返回值:成功时返回所读取到的最多包含length-1个字符的字符串(读取过程在碰到 换行符、到达EOF或者已读取了length-1字节时停止),失败时返回FALSE。 【例3.21】 fgets()函数应用示例(file05.php)。 "; die(); }w hile (!feof($fp)){ $str=fgets($fp); echo $str."
"; }f close($fp); ? > 该示例的运行结果如图3.21所示。 图3.21 程序file05.php的运行结果 7.file()函数 file()函数用于将整个文件读取到一个数组中,其基本的语法格式为 array file(string filename) 参数:filename用于指定文件名。 返回值:成功时返回包含整个文件内容的数组(每个元素存放文件的一行,包括换行符 在内),失败时返回FALSE。 【例3.22】 file()函数应用示例(file06.php)。 $line){ echo $n.": ".$line."
"; } ? > 该示例的运行结果如图3.22所示。 图3.22 程序file06.php的运行结果 8.filesize()函数 filesize()函数用于获取文件的大小(即字节数),其语法格式为 int filesize(string filename) 参数:filename用于指定文件名。 返回值:成功时返回指定文件的字节数,失败时返回FALSE。 9.fread()函数 fread()函数用于读取文件的内容,其语法格式为 string fread(resource handle, int length) 参数:handle为文件指针(该文件指针指向要从其读取内容的文件);length用于指定 长度(或字节数)。 返回值:成功时返回所读取到的最多包含length个字符的字符串(读取过程在到达 EOF或者已读取了length字节时停止),失败时返回FALSE。 【例3.23】 filesize()与fread()函数应用示例(file07.php)。 "; die(); } $str=fread($fp,filesize($fn)); echo str_replace("\n","
",$str); fclose($fp); ? >