标准php发行包中有1000多个标准函数,这些标准函数都是系统内置的,不需要用户创建就可以直接使用
如:
<?php
echo md5('123456');
echo '<br/>';
echo sha1('123456');
echo '<br/>';
echo pi();
?>
output
e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359
7.2.自定义函数
7.2.1函数命名基本原则:
1.函数名不能和已有的函数名重名。
2.函数名只能包含字母、数字和下划线。
3.函数名不能以数字开头
7.2.2基本使用:用function进行声明
<?php
//创建函数
function funcCountArea($radius)
{
return $radius*$radius*pi();
}
//使用函数
$area = funcCountArea(20);
echo $area;
echo '<br/>';
$area2 = funcCountArea(30);
echo $area2;
?>
output
1256.63706144
2827.43338823
7.2.3按值传参
<?php
$a = 5;
function funcChange($a)
{
$a = 2 * $a;
}
funcChange ($a);
echo $a;
?>
output
5
7.2.4按引用传参
<?php
$a = 5;
function funcChange(&$a)
{
$a = 2 * $a;
}
funcChange ($a);
echo $a;
?>
output
10
7.2.5返回多个值的函数调用
<?php
function funcUserInfo($username,$password)
{
$userInfo = array($username,$password);
return $userInfo;
}
$arr = funcUserInfo('anllin','123456');
print_r($arr);
?>
output
Array ( [0] => anllin [1] => 123456 )
7.2.6另一种返回多个值的函数调用(实用:推荐)
<?php
function funcUserInfo($username, $password)
{
$userInfo [] = $username;
$userInfo [] = $password;
return $userInfo;
}
$arr[] = funcUserInfo ( 'Bob', '512655' );
$arr[] = funcUserInfo ( 'John', '458736' );
$arr[] = funcUserInfo ( 'Mark', '925472' );
print_r ( $arr );
?>
output
Array ( [0] => Array ( [0] => Bob [1] => 512655 ) [1] => Array ( [0] => John [1] => 458736 ) [2] => Array ( [0] => Mark [1] => 925472 ) )
注意:函数调用是不区分大小写的,但是变量名是区分大小写的。
7.2.7理解作用域:
局部变量:
在函数内部声明的变量。
全局变量:
在函数外部声明的变量。
7.2.8局部变量转换成全局变量
<?php
$a = 5;
function funcChangeValue()
{
global $a;
$a = 10;
}
funcChangeValue();
echo $a;
?>
output
10
7.2.9超级全局变量$GLOBALR的使用
<?php
$GLOBALS['a'] = 5;
function funcChangeValue()
{
$GLOBALS['a'] = 10;
}
funcChangeValue();
echo $GLOBALS['a'];
?>
Output
10
7.3.文件包含
7.3.1 Include的使用,可以包含相同的文件多次
<?php
include 'demo1.php';
include 'demo1.php';
include 'demo1.php';
?>
output
e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359
--------------------------------------------------------------------------------
e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359
--------------------------------------------------------------------------------
e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359
7.3.2 include_once使用上和include没什么区别,但是调用多次只会包含相同的文件一次
<?php
include_once 'demo1.php';
include_once 'demo1.php';
include_once 'demo1.php';
?>
output
e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359
7.3.3 require() 语句包含并运行指定文件。
<?php
require 'demo1.php';
require 'demo1.php';
require 'demo1.php';
?>
output
e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359
--------------------------------------------------------------------------------
e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359
--------------------------------------------------------------------------------
e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359
7.3.4 require_once() 语句在脚本执行期间包含并运行指定文件.但是不重复包含相同的文件。
<?php
require_once 'demo1.php';
require_once 'demo1.php';
require_once 'demo1.php';
?>
output
e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359s
7.3.5 include与require的区别
Include后面如果还有其他代码,当调用include出错时,后面的代码还会继续执行,但是require则不会。
Include在调用一个不存在的文件时,会给出警告,但是会继续执行后面的代码。
<?php
include 'demo111.php';
echo('this is demo13.php');
?>
output
Warning: include(demo111.php) [function.include]: failed to open stream: No such file or directory in D:\AppServ\www\Basic7\demo13.php on line 2
Warning: include() [function.include]: Failed opening 'demo111.php' for inclusion (include_path='.;C:\php5\pear') in D:\AppServ\www\Basic7\demo13.php on line 2
this is demo13.php
Require在调用一个不存在的文件时,会给出一个错误,并中止代码的执行。
<?php
require 'demo111.php';
echo('this is demo14.php');
?>
Output
Warning: require(demo111.php) [function.require]: failed to open stream: No such file or directory in D:\AppServ\www\Basic7\demo14.php on line 2
Fatal error: require() [function.require]: Failed opening required 'demo111.php' (include_path='.;C:\php5\pear') in D:\AppServ\www\Basic7\demo14.php on line 2
7.4.魔法常量
名称
描述
_FILE_
当前文件名
_LINE_
当前行号
_FUNCTION_
当前函数名
_CLASS_
当前类名
_METHOD_
当前方法名
所谓的魔法常量,并不是真的常量,而是根据场合去获取固定值的变量<?php
echo __FILE__;
echo '<br>';
echo __LINE__;
echo '<br>';
function funcTest()
{
echo __FUNCTION__;
}
funcTest();
?>
output
D:\AppServ\www\Basic7\demo15.php
5
funcTest
basename -- 返回路径中的文件名部分
dirname -- 返回路径中的目录部分
pathinfo -- 返回文件路径的信息
realpath -- 返回规范化的绝对路径名
<?php
$path = 'demo1.php';
$path = realpath($path);
echo basename($path);
echo '<br>';
echo dirname($path);
echo '<br>';
$array_path = pathinfo($path);
echo 'basename : '.$array_path['basename'].'<br>';
echo 'dirname : '.$array_path['dirname'].'<br>';
echo 'extension : '.$array_path['extension'].'<br>';
echo 'filename : '.$array_path['filename'].'<br>';
?>
Output:
demo1.php
D:\AppServ\www\Basic6
basename : demo1.php
dirname : D:\AppServ\www\Basic6
extension : php
filename : demo1
二.磁盘、目录和文件计数
1.查看文件大小和磁盘空间
filesize -- 取得文件大小
disk_free_space -- 返回目录中的可用空间
disk_total_space -- 返回一个目录的磁盘总大小
<?php
$path ='demo2.php';
$path = realpath($path);
$drive = 'c:';
echo round(filesize($path)/1024,2).'kb'.'<br/>';
echo round(disk_free_space($drive)/1024/1024/1024,2).'GB'.'<br/>';
echo round(disk_total_space($drive)/1024/1024/1024,2).'GB'.'<br/>';
?>
output
0.26kb
10.61GB
30.01GB
2.获得文件的各种时间
fileatime -- 取得文件的上次访问时间
filectime -- 取得文件的 inode 修改时间
filemtime -- 取得文件修改时间
<?php
$file = realpath ( '../Basic5/demo3.php' );
$date_format = 'Y-m-d h:i:s';
echo 'lastest accessing time : '.date ( $date_format, fileatime ( $file ) ) . '<br>';
echo 'lastest change time : '.date ( $date_format, filectime ( $file ) ) . '<br>';
echo 'lastest modify time : '.date ( $date_format, filemtime ( $file ) ) . '<br>';
?>
output
lastest accessing time : 2011-12-18 04:26:49
lastest change time : 2011-12-18 04:26:49
lastest modify time : 2011-12-18 04:29:15
三.文件处理
文件读写的两种方式:
1.php所有版本都支持的方法:
fopen -- 打开文件或者 URL
fclose -- 关闭一个已打开的文件指针
fwrite -- 写入文件(可安全用于二进制文件)
表 1. fopen() 中 mode 的可能值列表
mode
说明
'r'
只读方式打开,将文件指针指向文件头。
'r+'
读写方式打开,将文件指针指向文件头。
'w'
写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'w+'
读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'a'
写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'a+'
读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'x'
创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
'x+'
创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
<?php
$fp = fopen('file1.txt','w');
$outStr = "my name is anllin,\r\nmy age is 29.";
fwrite($fp,$outStr,strlen($outStr));
fclose($fp);
?>
output
my name is anllin,
my age is 29.
2.php5新加入的方法
file_put_contents -- 将一个字符串写入文件
<?php
file_put_contents('file2.txt',"my name is anllin,\r\nmy age is 29.");
?>
output
my name is anllin,
my age is 29.
读出文件内容的方法:
函数
功能
Fgetc()
读出一个字符,并将指针移到下一个字符
Fgets()
读出一行字符,可以指定一行显示的长度。
Fgetss()
从文件指针中读取一行并过滤掉HTML标记
Fread()
读取定量的字符
Fpassthru()
输出文件到指定处的所有剩余数据
File()
将整个文件读入数组中,以行分组
Readfile()
读入一个文件并写入到输出缓冲
File_get_contents()
将整个文件读入一个字符串
Feof()
判断读完文件函数
File_exists()
查看文件是否存在
示例文件file1.txt的内容如下:my name is anllin,
my age is 29.
fgetc -- 从文件指针中读取字符
Demo.php
<?php
$fp = fopen('file1.txt','r');
echo fgetc($fp);
echo fgetc($fp);
fclose($fp);
?>
Output:
my
fgets -- 从文件指针中读取一行
<?php
$fp = fopen('file1.txt','r');
echo fgets($fp);
echo fgets($fp);
fclose($fp);
?>
output
my name is anllin, my age is 29.
fgetss -- 从文件指针中读取一行并过滤掉 HTML 标记
<?php
$fp = fopen('file3.txt','w');
$outStr = "my name is <b>anllin</b>";
fwrite($fp,$outStr,strlen($outStr));
fclose($fp);
$ftp = fopen('file3.txt','r');
echo fgetss($ftp);
fclose($ftp);
?>
Output
my name is anllin
fread -- 读取文件(可安全用于二进制文件)
<?php
$filename = 'file1.txt';
$fp = fopen($filename,'r');
$contents = fread($fp,filesize($filename));
echo $contents;
fclose($fp);
?>
Output
my name is anllin, my age is 29.
fpassthru -- 输出文件指针处的所有剩余数据
<?php
$filename = 'file1.txt';
$fp = fopen($filename,'rb');
$leftSize = fpassthru($fp);
echo $leftSize;
fclose($fp);
?>
output
my name is anllin, my age is 29. 33
file -- 把整个文件读入一个数组中
<?php
$lines = file('file1.txt');
foreach ($lines as $line_num => $line)
{
echo $line_num.' : '.$line.'<br>';
}
?>
output
0 : my name is anllin,
1 : my age is 29.
readfile -- 输出一个文件
<?php
$size = readfile('file1.txt');
echo $size;
?>
output
my name is anllin, my age is 29.33
file_get_contents -- 将整个文件读入一个字符串(php5.0新增)
<?php
$contents = file_get_contents('file1.txt');
echo $contents;
?>
output
my name is anllin, my age is 29.
feof -- 测试文件指针是否到了文件结束的位置
<?php
$fp = fopen('file1.txt','r');
while(!feof($fp))
{
echo fgetc($fp);
}
fclose($fp);
?>
output
my name is anllin, my age is 29.
file_exists -- 检查文件或目录是否存在
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<?php
$filename = 'file1.txt';
if(file_exists($filename))
{
echo '执行文件读写操作';
}
else
{
echo '你要找的文件不存在';
}
?>
output
执行文件读写操作
filesize -- 取得文件大小
<?php
$file_size = filesize('file1.txt');
echo $file_size;
?>
output
33
unlink -- 删除文件
<?php
$isDeleted = unlink('file3.txt');
echo $isDeleted;
?>
output
1
rewind -- 倒回文件指针的位置
ftell -- 返回文件指针读/写的位置
fseek -- 在文件指针中定位
<?php
$fp = fopen ( 'file1.txt', 'r' );
fgetc ( $fp );
fgetc ( $fp );
echo ftell ( $fp ) . '<br>';
rewind ( $fp );
echo ftell ( $fp ) . '<br>';
fgetc ( $fp );
fgetc ( $fp );
echo ftell ( $fp ) . '<br>';
fseek($fp,0);//same as rewind ($fp)
echo ftell ( $fp ) . '<br>';
?>
output
2
0
2
0
Flock的操作值
操作值
意义
LOCK_SH(以前为1)
读写锁定。这意味着文件可以共享,其他人可以读该文件
LOCK_EX(以前为2)
写操作锁定。这是互斥的,该文件不能被共享
LOCK_UN(以前为3)
释放已有的锁定
LOCK_NB(以前为4)
防止在请求加锁时发生阻塞
flock -- 轻便的咨询文件锁定<?php
$filename = 'file1.txt';
$fp = fopen($filename,'rb');
flock($fp,LOCK_EX);//locked
$contents = fread($fp,filesize($filename));
flock($fp,LOCK_UN);//unlocked
echo $contents;
fclose($fp);
?>
output
my name is anllin, my age is 29.
目录句柄操作
opendir -- 打开目录句柄
readdir -- 从目录句柄中读取条目
closedir -- 关闭目录句柄
<?php
$dir= opendir('../Basic6');
while(!!$file = readdir($dir))
{
echo $file.'<br/>';
}
closedir($dir);
?>
output
.
..
.buildpath
.project
.settings
demo1.php
demo10.php
demo11.php
demo12.php
demo13.php
demo14.php
demo15.php
demo16.php
demo17.php
demo18.php
demo19.php
demo2.php
demo20.php
demo3.php
demo4.php
demo5.php
demo6.php
demo7.php
demo8.php
demo9.php
file1.txt
file2.txt
scandir -- 列出指定路径中的文件和目录
<?php
$files = scandir('../Basic6');
foreach($files as $file)
{
echo $file.'<br>';
}
?>
output
.
..
.buildpath
.project
.settings
demo1.php
demo10.php
demo11.php
demo12.php
demo13.php
demo14.php
demo15.php
demo16.php
demo17.php
demo18.php
demo19.php
demo2.php
demo20.php
demo21.php
demo3.php
demo4.php
demo5.php
demo6.php
demo7.php
demo8.php
demo9.php
file1.txt
file2.txt
rename -- 重命名一个文件或目录
<?php
rename('demo1.php','demo01.php');
if(file_exists('demo01.php'))
{
echo 'file rename success';
}
else
{
echo 'file rename fail';
}
?>
output
file rename success
rmdir -- 删除目录
<?php
rmdir('123');
if(file_exists('123'))
{
echo 'delete file fail';
}
{
echo 'delete file success';
}
?>
output
delete file success
数组是一组有某种共同特性的元素,包括相似性和类型。
每个元素由一个特殊的标识符来区分,称之为key,而每个key都有一个value
1.创建数组的两种方式:
1.1 用array()函数
<?php
$usernames = array ('Alerk', 'Mary', 'Lucy', 'Bob', 'Jack', 'John', 'Mark' );
foreach ( $usernames as $name )
{
echo $name . '<br/>';
}
?>
output
Alerk
Mary
Lucy
Bob
Jack
John
Mark
1.2 用range()函数
<?php
$numbers = range ( 0, 10 );
foreach ( $numbers as $num )
{
echo $num . '<br/>';
}
$letters = range ( 'a', 'z' );
foreach ( $letters as $letter )
{
echo $letter . '<br/>';
}
?>
output
0
1
2
3
4
5
6
7
8
9
10
a
c
d
e
f
g
h
i
j
k
l
m
o
q
r
t
u
v
w
x
y
z
2.循环访问数组元素的两种方式:
2.1 for循环
<?php
//range的第三个参数表示步长
$numbers = range(1,10,2);
for($i = 0;$i<count($numbers); $i ++)
{
echo $numbers[$i].'<br/>';
}
?>
output
1
3
5
7
9
2.2 foreach循环
<?php
$letters = range('a','h',2);
foreach($letters as $letter)
{
echo $letter.'<br/>';
}
?>
output
a
c
e
g
Foreach还可以用来输出数组的下标和对应的值
<?php
$letters = range('a','g',2);
foreach($letters as $key => $value)
{
echo $key.'---'.$value.'<br/>';
}
?>
output
0---a
1---c
2---e
3---g
3.is_array()函数,用于变量判断是否为一个数组
<?php
$numbers = range(1,10,2);
if(is_array($numbers))
{
foreach($numbers as $num)
{
echo $num.'<br/>';
}
}
else
{
echo $numbers;
}
?>
4.print_r函数,打印关于变量的易于理解的信息
<?php
$usernames = array ('Jackie', 'Mary', 'Lucy', 'Bob', 'Mark', 'John' );
print_r ( $usernames );
?>
output
Array ( [0] => Jackie [1] => Mary [2] => Lucy [3] => Bob [4] => Mark [5] => John )
源代码里可以看到显示为:
Array
(
[0] => Jackie
[1] => Mary
[2] => Lucy
[3] => Bob
[4] => Mark
[5] => John
)
二.自定义键数组
1.如果不想创建默认下标为零的数组,可以用如下方法,创建键为字符串的数组
<?php
//初始化数组
$userages = array('Jack'=> 23,'Lucy'=>25,'Mark'=>28);
//访问数组各元素
echo $userages['Jack'].'<br/>';
echo $userages['Lucy'].'<br/>';
echo $userages['Mark'].'<br/>';
?>
2.往自定义键数组里追加元素
<?php
//初始化数组
$ages = array('Jack'=>23);
//追加元素
$ages['Lucy']=25;
$ages['Mark']=28;
foreach($ages as $key => $value)
{
echo $key.'----'.$value.'<br/>';
}
?>
3.直接添加元素,无需创建数组。
<?php
//不创建数组直接添加
$ages['Jack']=23;
$ages['Lucy']=25;
$ages['Mark']=28;
foreach($ages as $key => $value)
{
echo $key.'----'.$value.'<br/>';
}
?>
4.循环打印数组foreach的使用
<?php
$ages['Jack']=23;
$ages['Lucy']=25;
$ages['Mark']=28;
foreach($ages as $key => $value)
{
echo $key.'=>'.$value.'<br/>';
}
?>
5. each() -- 返回数组中当前的键/值对并将数组指针向前移动一步
<?php
$ages['Jack']=23;
$ages['Lucy']=25;
$ages['Mark']=28;
$a = each($ages);
print_r($a);
echo '<br/>';
$a = each($ages);
print_r($a);
echo '<br/>';
$a = each($ages);
print_r($a);
?>
用each()函数做循环打印
<?php
$ages['Jack']=23;
$ages['Lucy']=25;
$ages['Mark']=28;
while(!! $element = each($ages))
{
print_r($element);
echo '<br>';
}
?>
另一种打印方式
<?php
$ages['Jack']=23;
$ages['Lucy']=25;
$ages['Mark']=28;
while(!! $element = each($ages))
{
echo $element['key'].'=>'.$element['value'];
echo '<br>';
}
?>
6.list()函数的使用--把数组中的值赋给一些变量
<?php
$ages['Jack']=23;
$ages['Lucy']=25;
$ages['Mark']=28;
list($name,$age)= each($ages);
echo $name.'=>'.$age;
?>
用list循环打印结果
<?php
$ages['Jack']=23;
$ages['Lucy']=25;
$ages['Mark']=28;
while(!!list($name,$age)= each($ages))
{
echo $name.'=>'.$age.'<br>';
}
?>
output
Jack=>23
Lucy=>25
Mark=>28
7.reset()函数的使用--将数组的内部指针指向第一个单元
<?php
$ages['Jack']=23;
$ages['Lucy']=25;
$ages['Mark']=28;
each($ages);
each($ages);
list($name,$age)= each($ages);
echo $name.'=>'.$age.'<br>';
//把数组重新设定到数组开始处
reset($ages);
list($name,$age)= each($ages);
echo $name.'=>'.$age.'<br>';
?>
Output
Mark=>28
Jack=>23
8. array_unique() -- 移除数组中重复的值
<?php
$nums = array(1,2,3,4,5,6,5,4,3,2,1,1,2,3,4,5,6);
//返回一个不包含重复值的数组
$result = array_unique($nums);
print_r($result);
?>
Output
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 )
9. array_flip ()-- 交换数组中的键和值
<?php
$userages = array('Jack'=> 23,'Lucy'=>25,'Mark'=>28);
$ages = array_flip($userages);
print_r($ages);
?>
output
Array ( [23] => Jack [25] => Lucy [28] => Mark )
三.数组里的数组
数组里不一定就是一个关键字和值的列表,数组里也可以放入数组
<?php
$produces = array(
array('apple',6,28.8),
array('pear',3,15.6),
array('banana',10,4.6)
);
echo $produces[0][0].'|'.$produces[0][1].'|'.$produces[0][2].'<br>';
echo $produces[1][0].'|'.$produces[1][1].'|'.$produces[1][2].'<br>';
echo $produces[2][0].'|'.$produces[2][1].'|'.$produces[2][2].'<br>';
?>
output
apple|6|28.8
pear|3|15.6
banana|10|4.6
用for循环打印数组中的数组
<?php
$produces = array (
array ('apple', 6, 28.8 ),
array ('pear', 3, 15.6 ),
array ('banana', 10, 4.6 )
);
for($i = 0; $i < count ( $produces ); $i ++)
{
for($j = 0; $j < count ( $produces [$i] ); $j ++)
{
echo '|' . $produces[$i][$j];
}
echo '<br>';
}
?>
output
|apple|6|28.8
|pear|3|15.6
|banana|10|4.6
二维数组
<?php
$produces = array (
array ('name' => 'apple', 'amount' => 6, 'price' => 28.8 ),
array ('name' => 'pear', 'amount' => 3, 'price' => 15.6 ),
array ('name' => 'banana', 'amount' => 10, 'price' => 4.6 )
);
while(!!List($key,$value)=each($produces))
{
while(!!list($key2,$value2)=each($value))
{
echo '|'.$key2.'=>'.$value2;
}
echo '<br>';
}
?>
output
|name=>apple|amount=>6|price=>28.8
|name=>pear|amount=>3|price=>15.6
|name=>banana|amount=>10|price=>4.6
用foreach来打印则更容易(推荐)
<?php
$produces = array (
array ('name' => 'apple', 'amount' => 6, 'price' => 28.8 ),
array ('name' => 'pear', 'amount' => 3, 'price' => 15.6 ),
array ('name' => 'banana', 'amount' => 10, 'price' => 4.6 )
);
foreach($produces as $key1 => $value1)
{
foreach($value1 as $key2 => $value2)
{
echo '|'.$key2.'=>'.$value2;
}
echo '<br>';
}
?>
output
|name=>apple|amount=>6|price=>28.8
|name=>pear|amount=>3|price=>15.6
|name=>banana|amount=>10|price=>4.6
四.数组的排序
1.Sort()函数对英文的排序
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<?php
$fruits = array('lemo','banana','apple','pear');
echo '原始的数组:';
print_r($fruits);
echo '<br/>';
sort($fruits);
echo '排序后的数组:';
print_r($fruits);
?>
output
原始的数组:Array ( [0] => lemo [1] => banana [2] => apple [3] => pear )
排序后的数组:Array ( [0] => apple [1] => banana [2] => lemo [3] => pear )
2.Sort()函数对中文的排序
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<?php
$fruits = array('柠檬','香蕉','苹果','梨子');
echo '原始的数组:';
print_r($fruits);
echo '<br/>';
sort($fruits);
echo '排序后的数组:';
print_r($fruits);
?>
Output:
原始的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 )
排序后的数组:Array ( [0] => 柠檬 [1] => 梨子 [2] => 苹果 [3] => 香蕉 )
3. asort -- 对数组进行排序并保持索引关系
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<?php
$fruits = array('a'=>'柠檬','b'=>'香蕉','c'=>'苹果','d'=>'梨子');
echo '原始的数组:';
print_r($fruits);
echo '<br/>';
asort($fruits);
echo '排序后的数组:';
print_r($fruits);
?>
output
原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 )
排序后的数组:Array ( [a] => 柠檬 [d] => 梨子 [c] => 苹果 [b] => 香蕉 )
4. ksort -- 对数组按照键名排序
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<?php
$fruits = array('b'=>'柠檬','a'=>'香蕉','d'=>'苹果','c'=>'梨子');
echo '原始的数组:';
print_r($fruits);
echo '<br/>';
ksort($fruits);
echo '排序后的数组:';
print_r($fruits);
?>
output
原始的数组:Array ( [b] => 柠檬 [a] => 香蕉 [d] => 苹果 [c] => 梨子 )
排序后的数组:Array ( [a] => 香蕉 [b] => 柠檬 [c] => 梨子 [d] => 苹果 )
5. rsort -- 对数组逆向排序
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<?php
$fruits = array('柠檬','香蕉','苹果','梨子');
echo '原始的数组:';
print_r($fruits);
echo '<br/>';
rsort($fruits);
echo '排序后的数组:';
print_r($fruits);
?>
output
原始的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 )
排序后的数组:Array ( [0] => 香蕉 [1] => 苹果 [2] => 梨子 [3] => 柠檬 )
6. arsort -- 对数组进行逆向排序并保持索引关系
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<?php
$fruits = array('a'=>'柠檬','b'=>'香蕉','c'=>'苹果','d'=>'梨子');
echo '原始的数组:';
print_r($fruits);
echo '<br/>';
arsort($fruits);
echo '排序后的数组:';
print_r($fruits);
?>
output
原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 )
排序后的数组:Array ( [b] => 香蕉 [c] => 苹果 [d] => 梨子 [a] => 柠檬 )
7. krsort -- 对数组按照键名逆向排序
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<?php
$fruits = array('a'=>'柠檬','b'=>'香蕉','c'=>'苹果','d'=>'梨子');
echo '原始的数组:';
print_r($fruits);
echo '<br/>';
krsort($fruits);
echo '排序后的数组:';
print_r($fruits);
?>
output
原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 )
排序后的数组:Array ( [d] => 梨子 [c] => 苹果 [b] => 香蕉 [a] => 柠檬 )
8. shuffle -- 将数组打乱
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<?php
$fruits = array('a'=>'柠檬','b'=>'香蕉','c'=>'苹果','d'=>'梨子');
echo '原始的数组:';
print_r($fruits);
echo '<br/>';
shuffle($fruits);
echo '打乱后的数组:';
print_r($fruits);
?>
output
原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 )
打乱后的数组:Array ( [0] => 香蕉 [1] => 苹果 [2] => 柠檬 [3] => 梨子 )
9. array_reverse -- 返回一个单元顺序相反的数组
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<?php
$fruits = array('a'=>'柠檬','b'=>'香蕉','c'=>'苹果','d'=>'梨子');
echo '原始的数组:';
print_r($fruits);
echo '<br/>';
$fruits = array_reverse($fruits);
echo '反转后的数组:';
print_r($fruits);
?>
output
原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 )
反转后的数组:Array ( [d] => 梨子 [c] => 苹果 [b] => 香蕉 [a] => 柠檬 )
10. array_unshift -- 在数组开头插入一个或多个单元
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<?php
$fruits = array('a'=>'柠檬','b'=>'香蕉','c'=>'苹果','d'=>'梨子');
echo '原始的数组:';
print_r($fruits);
echo '<br/>';
array_unshift($fruits,'杮子');
echo '插入后的数组:';
print_r($fruits);
?>
output
原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 )
插入后的数组:Array ( [0] => 杮子 [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 )
11. array_shift -- 将数组开头的单元移出数组
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<?php
$fruits = array('a'=>'柠檬','b'=>'香蕉','c'=>'苹果','d'=>'梨子');
echo '原始的数组:';
print_r($fruits);
echo '<br/>';
array_shift($fruits);
echo '移出后的数组:';
print_r($fruits);
?>
output
原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 )
移出后的数组:Array ( [b] => 香蕉 [c] => 苹果 [d] => 梨子 )
12. array_rand -- 从数组中随机取出一个或多个单元
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<?php
$fruits = array ('柠檬', '香蕉', '苹果', '梨子' );
echo '原始的数组:';
print_r ( $fruits );
echo '<br/>';
$newArr_key = array_rand ( $fruits, 2 );
echo '随机后的数组:';
echo $fruits [$newArr_key [0]].' ';
echo $fruits [$newArr_key [1]];
?>
output
原始的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 )
随机后的数组:梨子 苹果
13. array_pop -- 将数组最后一个单元弹出(出栈)
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<?php
$fruits = array ('柠檬', '香蕉', '苹果', '梨子' );
echo '原始的数组:';
print_r ( $fruits );
echo '<br/>';
array_pop ( $fruits );
echo '弹出后的数组:';
print_r ( $fruits );
?>
Output:
原始的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 )
弹出后的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 )
14. array_push -- 将一个或多个单元压入数组的末尾(入栈)
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<?php
$fruits = array ('柠檬', '香蕉', '苹果', '梨子' );
echo '原始的数组:';
print_r ( $fruits );
echo '<br/>';
array_push ( $fruits,'杮子');
echo '弹出后的数组:';
print_r ( $fruits );
?>
Output:
原始的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 )
弹出后的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 [4] => 杮子 )
五.数组的指针的操作
each -- 返回数组中当前的键/值对并将数组指针向前移动一步
current -- 返回数组中的当前单元
reset -- 将数组的内部指针指向第一个单元
end -- 将数组的内部指针指向最后一个单元
next -- 将数组中的内部指针向前移动一位
pos -- current() 的别名
prev -- 将数组的内部指针倒回一位
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<?php
$fruits = array ('柠檬', '香蕉', '苹果', '梨子' );
print_r ( $fruits );
echo '<br/>';
echo 'each() : ';
print_r ( each ( $fruits ) );
echo '<br/>';
echo 'current() : ';
echo (current ( $fruits ));
echo '<br/>';
echo 'next() : ';
echo (next ( $fruits ));
echo '<br/>';
echo 'end() : ';
echo (end ( $fruits ));
echo '<br/>';
echo 'prev() : ';
echo (prev ( $fruits ));
echo '<br/>';
echo 'pos() : ';
echo (pos ( $fruits ));
echo '<br/>';
?>
Output:
Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 )
each() : Array ( [1] => 柠檬 [value] => 柠檬 [0] => 0 [key] => 0 )
current() : 香蕉
next() : 苹果
end() : 梨子
prev() : 苹果
pos() : 苹果
六.统计数组个数
count -- 计算数组中的单元数目或对象中的属性个数
sizeof -- count() 的别名
array_count_values -- 统计数组中所有的值出现的次数
<?php
$nums = array (1, 3, 5, 1, 3, 4, 5, 65, 4, 2, 2, 1, 4, 4, 1, 1, 4, 1, 5, 4, 5, 4 );
echo count ( $nums );
echo '<br>';
echo sizeof ( $nums );
echo '<br>';
$arrayCount = array_count_values ( $nums );
print_r ( $arrayCount );
?>
output
22
22
Array ( [1] => 6 [3] => 2 [5] => 4 [4] => 7 [65] => 1 [2] => 2 )
七.将数组转换成标量变量:extract()
把数组中的每个元素转换成变量,变量名是数组元素的key,变量值为数组元素的value.
<?php
$fruits = array('a'=>'apple','b'=>'banana','o'=>'orange');
extract($fruits);
echo $a.'<br>';
echo $b.'<br>';
echo $o.'<br>';
?>
output
apple
banana
orange