六、PHP基础教程,PHP中常用系统函数

6.1 数值进制转换

number bindec(string binary_string) 二转十

number octdec(string octal_string) 八转十

number hexdec(string hex_string) 十六转十

string decbin(int number) 十进制转换为二进制

string decoct(int number) 十转八

string dechex(int number) 十转十六

string base_convert(string number,
int frombase,
int tobase)

number是要转换的数,frombase是原进制,tobase是转换后的进制。如base_convert(’13’,10,2)相当于decbin(13)。

6.2 科学计算

1、绝对值

number abs(mixed number)

返回number的绝对值。

2、三角函数

float tan(float arg) 正切

float sin(float arg) 正弦

float cos(float arg) 余弦

float atan(float arg) 反正切

float asin(float arg) 反正弦

float acos(float arg) 反余弦

float pi(void) 圆周率(或直接使用常量M_PI)

float deg2rad(float number) 角度制转为弧度制(2=to)

float rad2deg(float number) 弧度制转为角度制

3、指数运算

number pow(number base,number exp)

base为底数,exp为幂。而pow(2,4)相当于2^4。

4、对数运算

float log(float arg [,float base])

arg为真数,base为底数。如log(5,2)就是以2为底的5的对数。

5、开方运算

float sqrt(float arg)

返回arg的平方根。

6.3 随机数

1、libcs随机数(传统)

int rand([int min,
int max])

生成介于min和max之间的随机整数(包括min和max),如rand(1,3)就可能生成1、2、3这三种情况。如果没有指定min和max,则生成介于0和getrandmax()之间的随机整数。如果希望生成比getrandmax()更大的随机数,请设置min和max。

int getrandmax(void)

返回rand()能取到的最大值,如在Windows平台下是32768。

2、mt_rand()随机数(新兴,速度快)

int mt_rand([int min,
int max])

生成介于min和max之间的随机整数(包括min和max),如rand(1,3)就可能生成1、2、3这三种情况。如果没有指定min和max,则生成介于0和mt_getrandmax()之间的随机整数。如果希望生成比mt_getrandmax()更大的随机数,请设置min和max。

int mt_getrandmax(void)

返回mt_rand()能取到的最大值。

6.4 四舍五入、取整和取余

float round(float val [,int precision])

对val进行四舍五入,并根据precision确定保留小数点后几位。如round(4.2)等于4;round(3.625,1)等于3.6。

float floor(float value)

舍尾取整,如floor(3.99)等于3。

float ceil(float value)

尽进取整,如ceil(3.01)等于4。

float fmod(float x,float y)

浮点数的取余运算,如果x、y都是整数,则fmod(x,y)相当于x%y;如果x、y不都是整数,则按照浮点数的运算法则来取余。如fmod(5,1.3)等于1.1,因为5=1.3*3+1.1。

6.5 比较大小

mixed max(number arg1 ,number arg2 [,number…])

mixed max(array numbers)

返回最大值。但要注意下面的用法:$val = max(array(2, 4, 8), array(2, 5, 7)),这样$val=array(2, 5, 7)。因为如果操作数都是数字,PHP会逐个比较,一经比出,后面就忽略了。

mixed min(number arg1 ,number arg2 [,number…])

mixed min(array numbers)

返回最小值。注意事项和max()一样。

6.6 判断数值是否合法

bool is_finite(float val)

判断val是否未超过界限(即系统所能表达的最大值)。

bool is_infinite(float val)

判断一个值是否为有限值。如果是有限值,则返回True;如果不是,则不返回任何值。如果该数值超过了PHP允许的浮点数值范围之内,那么它就是无限值。

bool is_nan(float val)

判断val是否不存在,如is_nan(acos(1.01))将返回true。

6.7 时间和日期函数

首先让我们认识两个概念,Unix纪元(Unix Epoch)和时间戳(timestamp)。前者指的是格林威治时间1970年1月1日零点(January 1 1970 00:00:00 GMT),后者则是从Unix纪元开始计数的秒数,从而表示具体时间,因此也可以是负数字。如时间戳若等于-86400,则其表示的时间是格林威治时间1969年12月31日零点(December 31 1969 00:00:00 GMT),以此类推。

1、int time(void)

1240632459

2、int mktime([int hour [,int minute [,int second

[,int month [,int day [,int year]]]]]])

返回指定时刻的时间戳。如果没有指定,则返回当前时刻的时间戳。

3、int strtotime(string time)

将time所表示的时间转换为时间戳并返回,如果转化失败则返回false。例如:

strtotime(“+1 days”,time());

//将当前日期中的日加1后的时间戳返回,注意理解“+1 days”,其中days位置还可以使用:hours,week,year,month等,或将“+1 days”写成:”+1 week 3 days 7 hours 5 seconds”,”next Monday”,”last Sunday”。

strtotime(“+1 days”,time());

//将当前日期中的时间加一天。

4、array getdate([int timestamp])

根据timestamp或当前时刻的时间戳生成一个数组,包含以下元素:

“seconds” 秒(0-59)

“minutes” 分(0-59)

“hours” 时(0-23)

“mday” 日(1-31)

“wday” 星期(0(星期日)-6(星期六))

“mon” 月(1-12)

“year” 年(四位)

“yday” 这一年的第几天(0-365)

“weekday” 星期全称(Monday-Sunday)

“month” 月份全称(January-December)

0 时间戳,相当于time()返回的值

5、string date(string format [,int timestamp])

根据格式字符串format输出timestamp所表示的时间或当前时刻。以下是用于format的字符:

—年—

Y 年份(四位)

y 年份(两位)

L 是否为闰年(1、0)

—月—

m 月(01-12)

n 月(1-12)

F 月份全称(January-December)

f 月份简称(Jan-Dec)

t 该月所含天数

—日—

d 日(01-31)

j 日(1-31)

z 这一年的第几天(0-365)

S 英语的日期后缀st、nd、rd、th,与j合用,即”jS”

–星期–

l 星期全称(Monday-Sunday)

D 星期简称(Mon-Sun)

w 星期(0(星期日)-6(星期六))

–时间–

H 24时制的小时(00-23)

h 12时制的小时(01-12)

G 24时制的小时(1-24)

g 12时制的小时(1-12)

A 上下午标识(AM-PM)

a 上下午标识(am-pm)

i 分(00-59)

s 秒(00-59)

以上符号之外的符号都会被直接输出,如果要输出以上符号则需要转义()。

6、int idate(string format [,int timestamp])

根据格式字符format输出一个由timestamp所表示的时间或当前时刻的一个值。以下是用于format的字符:Y、y、m、t、d、w、H、h、i、s,且要注意一次只能使用一个字符。另外,因为idate()返回的是整数,所以前置导零会被忽略。

7、mixed microtime([bool get_as_float])

返回一个形如”0.57224700 1156425759″的字符串,前半部分是微妙,后半部分是时间戳。如果get_as_float被设置为true,则返回形如1156425759.57的浮点数。

8、mixed gettimeofday([bool return_float])

返回一个数组集合,如果return_float被设置为true,则等价于microtime(true)。以下是数组所含元素:

“sec” 时间戳,如1156425759

“usec” 微秒,如572247

如果要以当前时刻生成一个精确到毫秒的ID的话:

$ID=date(“YmdHis”).substr(microtime(),2,3);

9、bool checkdate(int month ,int day ,int year)

判断一个日期是否存在。存在返回1,否则返回false。

10、UNIX时间戳转成标准时间

(X+8*3600)/86400+70*365+19

X表示UNIX时间戳的值。

〓关于时区的问题〓

从PHP5.1开始我们必须为程序设置时区。如我们现在在东八区,如果不设置时区的话,以上所有时间函数所得到的时间都会以格林威治时间为准,即比我们这里晚8个小时。设置时区有三种方法:

(1)在php.ini文件中找到date.timezone行,将前面的分号去掉,并赋值”Asia/Shanghai”或”PRC”。(老外好象把北京忘了)。

(2)如果不能修改php.ini文件,则在调用时间函数前,用date_default_timezone_set(“Asia/Shanghai”)来设置时区。相应地,可以用date_default_timezone_get()来获取当前时区。

(3)以下列格式输出时间:echo date(”Y-m-d H:i:s”, time()+8*60*60);

这样,时区就调整好了,时间函数也能准确运作了。其他可用与时区设置的参数可自行查阅PHP文档。

6.8、empty()与isset()函数的区别

empty(变量名):

如果 var 是非空或非零的值,则 empty() 返回 FALSE。换句话说,””、0、”0″、NULL、FALSE、array()、var $var;

以及没有任何属性的对象都将被认为是空的,如果var 为空,则返回TRUE。

除了当变量没有置值时不产生警告之外,empty()是 (boolean) var 的反义词。

isset(变量名):

如果var存在则返回TRUE,否则返回FALSE。

如果已经使用unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。同时要注意的是一个 NULL 字节(””)并不等同于 PHP 的 NULL 常数。

警告: isset() 只能用于变量,因为传递任何其它参数都将造成解析错误。若想检测常量是否已设置,可使用 defined() 函数。

PHP还设置了其他很多的以“is_”开头的函数,从名字就可以看出,这类函数的功能就是用来判断在调用该函数时所给出的参数“是不是什么类型的”、“是不是由什么组成的”或“是不是可以进行某种操作”。下面给出一些常用的以“is_”开头的函数,供大家参考:

is_array(varName),is_bool(varName),is_dir(pathName),is_file(fileName),is_double(varName),is_float(varName),is_int(varName),is_nan(varName)判断数值是否是合法的,is_null(varName),is_numeric(varName),is_string(varName)

6.9、unset()函数

功能:释放给定的变量

语法:unset(变量1,变量2,……)

6.10 realpath()函数

realpath() 函数返回绝对路径。

该函数删除所有符号连接(比如 ‘/./’, ‘/../’ 以及多余的 ‘/’),返回绝对路径名。若失败,则返回 false。比如说文件不存在的话。

6.11 PHP编码转换函数

iconv()函数的作用是:转换字符串的编码。

描述 string iconv ( string in_charset, string out_charset, string str )

注意:第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符,//IGNORE 会忽略掉不能转化的字符,而默认效果是从第一个非法字符截断。

mb_convert_encoding() 函数

mb_convert_encoding()函数的作用是:宽字符编码转换

描述 string mb_convert_encoding ( string str, string to-encoding [, mixed from-encoding])

注意:但是需要先enable mbstring 扩展库。两者区别:mb_convert_encoding 中根据内容自动识别编码;mb_convert_encoding功能强大,但是执行效率比iconv差太多;

总结:一般情况下用 iconv,只有当遇到无法确定原编码是何种编码时才用 mb_convert_encoding 函数。

例如:gb2312转换成utf-8

$utf=iconv(‘GB2312’, ‘UTF-8’, $_REQUEST[‘keyword’]);

将字符串utf-8码转换为gb2312码

$str = iconv(“UTF-8″,”GB2312//TRANSLIT”,$str);

6.12 URL参数编码与解码

rawurldecode()

rawurldecode — 对用rawurlencode()已编码的 URL 字符串进行解码

描述

string rawurldecode ( string str)

返回字符串,此字符串中百分号(%)后跟两位十六进制数的序列都将被替换成原义字符。

例子 1. rawurldecode() 示例

<?php

echo rawurldecode(‘foo%20bar%40baz’);

// foo bar@baz

?>

rawurlencode()

rawurlencode — 按照 RFC 1738 对 URL 进行编码

描述

string rawurlencode ( string str)

返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。这是在 RFC 1738 中描述的编码,是为了保护原义字符以免其被解释为特殊的 URL 定界符,同时保护 URL 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱。例如,如果你想在 FTP 的 URL 中包含密码:

例子 1. rawurlencode() 示例 1

<?php

echo ‘<a href=”ftp://user:’, rawurlencode(‘foo @+%/’),

‘@ftp.my.com/x.txt”>’;

?>

或者,如果你想通过 URL 的 PATH_INFO 构成部分去传递信息:

例子 2. rawurlencode() 示例 2

<?php

echo ‘<a href=”http://x.com/department_list_script/’,

rawurlencode(‘sales and marketing/Miami’), ‘”>’;

?>

urldecode()

urldecode — 解码用urlencode()已编码的 URL 字符串

描述

string urldecode ( string str)

解码给出的已编码字符串中的任何 %##。返回解码后的字符串。

例子 1. urldecode()

<?php

$a = explode(‘&

‘, $QUERY_STRING);

$i = 0;

while ($i <count($a))
{

$b = split(‘=’, $a[$i]);

echo ‘Value for parameter ‘, htmlspecialchars(urldecode($b[0])),

‘ is ‘, htmlspecialchars(urldecode($b[1])), “<br />n”;

$i++;

}

?>

urlencode()

urlencode — 编码 URL 字符串

描述

string urlencode ( string str)

返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码(参见 rawurlencode())不同。此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页: 例子 1. urlencode() 示例

<?php

echo ‘<a href=”mycgi?foo=’, urlencode($userinput), ‘”>’;

?>

注意:小心与 HTML 实体相匹配的变量。像 &

amp、&

copy 和 &

pound 都将被浏览器解析,并使用实际实体替代所期待的变量名。这是明显的混乱,W3C 已经告诫人们好几年了。参考地址:http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2 PHP 通过 arg_separator .ini 指令,支持将参数分割符变成 W3C 所建议的分号。不幸的是大多数用户代理并不发送分号分隔符格式的表单数据。较为简单的解决办法是使用 &

amp;

代替 &

作为分隔符。你不需要为此修改 PHP 的 arg_separator。让它仍为 &

,而仅使用 htmlentities(urlencode($data)) 对你的 URL 进行编码。

例子 2. urlencode() 与 htmlentities() 示例

<?php

echo ‘<a href=”mycgi?foo=’, htmlentities(urlencode($userinput)), ‘”>’;

?>

6.13删除指定字符串中的HTML标记

strip_tags()函数剥去 HTML、XML 以及 PHP 的标签。

语法:strip_tags(string,allow);

参数描述

string必需。规定要检查的字符串。

allow可选。规定允许的标签。这些标签不会被删除。

例子:

1、删除所有的HTML和XML标记

<?php

echo strip_tags(“Hello <b>world!</b>”);

?>

2、保存指定的标记

<?php

echo strip_tags(“Hello <b>
<i>world!</i>
</b>”,”<b>”);

//保存标记<br>

?>