第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)。
php
echo "abs(1)=".abs(1)."
";
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)。
php
echo "floor(3.14)=".floor(3.14)."
";
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)。
php
echo "round(125.456,2)=".round(125.456,2)."
";
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)。
php
echo "rand()=".rand()."
";
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)。
php
echo "pow(0,0)=".pow(0,0)."
";
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)。
php
echo "sqrt(0)=".sqrt(0)."
";
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)。
php
$str="Hello,World!";
echo strlen($str)."
";
$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)。
php
$str="\t#Hello,World!... ";
echo strlen($str)."
";
$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)。
php
$str="Hello,World!";
echo substr($str,0,1)."
";
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)。
php
$str="Hello,Abc123!";
$str1=strtoupper($str);
$str2=strtolower($str);
echo $str."
";
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)。
php
$str1="Hello";
$str2="hello";
49
if (strcmp($str1,$str2)>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)。
php
$str="我是一位学生!";
echo "替换前:
";
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)。
php
$now=time();
echo $now."
";
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)。
php
$now=time();
$dtstr=date("Y-m-d l H:i:s",$now);
$dtinfo=getdate($now);
echo $now."
";
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)。
php
$now=mktime(21,30,28,6,26,1996);
$dtstr=date("Y-m-d l H:i:s",$now);
$dtinfo=getdate($now);
echo $now."
";
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)。
php
$year=2020;
$month=2;
$day1=29;
$day2=30;
5 4
if (checkdate($month,$day1,$year))
echo $year."-".$month."-".$day1."是一个有效日期.
";
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)。
php
$fn="test.txt";
$fp=fopen($fn, "w");
if (!$fp){
echo $fn."文件打开失败!
";
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)。
php
$fn="test.txt";
$fp=fopen($fn, "w");
if (!$fp){
echo "文件打开失败!
";
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)。
php
$fn="test.txt";
$fp=fopen($fn, "r");
if (!$fp){
echo "文件打开失败!
";
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)。
php
$fn="test.txt";
$fp=fopen($fn, "r");
if (!$fp){
echo "文件打开失败!
";
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)。
php
$fn="test.txt";
$fp=fopen($fn, "r");
if (!$fp){
echo "文件打开失败!
";
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)。
php
$fn="test.txt";
6 0
$lines=file($fn);
foreach ($lines as $n=>$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)。
php
$fn="test.txt";
$fp=fopen($fn, "r");
if (!$fp){
echo "文件打开失败!
";
die();
} $str=fread($fp,filesize($fn));
echo str_replace("\n","
",$str);
fclose($fp);
? >