学习要点

  • 数组的分类
  • 数组的定义
  • 数组的遍历
  • 预定义数组
  • 数组的相关处理函数
  • PHP操作数组需要注意的细节

数组的分类

关于PHP数组

  • 由于PHP是弱类型的编程语言,所以PHP数组中的数组变量可以存储任意多个,任意类型的数据,并且可以实现其他语言强类型数据类型的堆、栈、队列等数据结构。
  • PHP中使用数组的目的就是将多个相互关联的数据组织在一起形成集合,作为一个单元进行操作和处理。
  • 员工信息表:

ID

姓名

部门

邮箱

2016001

张三

开发部

Zs@qq.com

2016002

李四

市场部

ls@qq.com

2016003

王五

行政部

ww@qq.com

2016004

赵六

销售部

zl@qq.com

PHP数组的分类

  1. 索引数组:索引是整数值,从0开始,依次递增。用位置来标识数组元素。

数组元素

2016001

张三

开发部

Zs@qq.com

索引

0

1

2

3

  2.关联数组:索引是字符串。通过名称来标识数组元素。

数组元素

2016001

张三

开发部

Zs@qq.com

索引

id

name

deptment

email

数组的定义

直接赋值的方式声明数组

  • 数组中元素的索引值只有一个的数组称为一维数组。
  • 声明一维数组的语法格式:
  1. $数组变量名[下标] = 数据; //下标指(索引值)可以是整数或者字符串
  • 员工信息声明索引数组和关联数组
  1. //声明索引数组,存储张三的信息
  2.  
  3. $zhangsan[0]=2016001;
  4.  
  5. $zhangsan[1]="张三";
  6.  
  7. $zhangsan[2]="开发部";
  8.  
  9. $zhangsan[3]="zs@qq.com";
  10.  
  11. //声明关联数组,存储李四的信息
  12.  
  13. $lisi[“id”]=2016002;
  14.  
  15. $lisi[“name”]="李四";
  16.  
  17. $lisi[“deptment”]="开发部";
  18.  
  19. $lisi[“email”]="ls@qq.com";
  20.  
  21. ü 索引数组和关联数组访问方式
  22.  
  23. //通过下标访问索引数组
  24.  
  25. echo $zhangsan[0];
  26.  
  27. echo $zhangsan[1];
  28.  
  29. echo $zhangsan[2];
  30.  
  31. echo $zhangsan[3];
  32.  
  33. //通过字符串索引访问管理数组
  34.  
  35. echo $lisi["id"];
  36.  
  37. echo $lisi["name"];
  38.  
  39. echo $lisi["deptment"];
  40.  
  41. echo $lisi["email"];

  

  • 使用PHP内置函数访问数组
  1. print_r($array) ; //输出数组中所有的元素和下标值
  2.  
  3. var_dump($array) ; //输出数组中所有的元素和下标值,同时输出每个元素的类型

  

  • 索引数组和关联数组混合声明
  1. //索引数组和管理数组混合声明:通过索引或者管理字符串查找元素
  2.  
  3. $zhangsan[0]=2016001;
  4.  
  5. $zhangsan["id"]=2016001;
  6.  
  7. $zhangsan[1]="张三";
  8.  
  9. $zhangsan["name"]="张三";
  10.  
  11. $zhangsan[2]="开发部";
  12.  
  13. $zhangsan["deptment"]="开发部";
  14.  
  15. $zhangsan[3]="zs@qq.com";
  16.  
  17. $zhangsan["email"]="zs@qq.com";
  18.  
  19. print_r($zhangsan);

  

  • 默认索引值数组声明
  1. //声明索引数组,存储张三的信息
  2.  
  3. $zhangsan[]=2016001;
  4.  
  5. $zhangsan[]="张三";//$zhangsan[12]="张三";索引改变情况
  6.  
  7. $zhangsan[]="开发部";
  8.  
  9. $zhangsan[]="zs@qq.com";

  

使用array()语言结构新建数组

  • array()构建索引数组
  1. $zhangsan1=array(2016001,"张三","开发部","zs@qq.com");
  2.  
  3. $zhangsan2=array(1=>2016001,3=>"张三",6=>"开发部",12=>"zs@qq.com");

  

  • array()构建关联数组
  1. $zhangsan2=array(“id”=>2016001,”name”=>"张三",”deptment”=>"开发部",”email”=>"zs@qq.com");

  

多维数组的声明

  • PHP数组可以存储PHP所支持的所有数据类型。
  • 如果数组的元素仍为数组,则构成了多维数组。
  • 员工信息表中,一个员工的信息可以放在一个一维数组中;如果员工信息很多,可以考虑把员工信息一维数组放到另外一个数组中,构成二维数组。
  • 二维数组的声明和一维数组一样:直接为数组元素赋值或者使用array()函数声明数组。
  1. //员工信息二维数组:默认数字索引方式
  2.  
  3. $employees1=array(
  4.  
  5. array(2016001,"张三","开发部","zs@qq.com"),
  6.  
  7. array(2016002,"李四","市场部","ls@qq.com"),
  8.  
  9. array(2016003,"王五","行政部","ww@qq.com"),
  10.  
  11. array(2016004,"赵六","销售部","zl@qq.com")
  12.  
  13. );
  14.  
  15. //员工信息二维数组:指定元素索引方式
  16.  
  17. $employees1=array(
  18.  
  19. "zs" => array(2016001,"张三","开发部","zs@qq.com"),
  20.  
  21. "ls" => array(2016002,"李四","市场部","ls@qq.com"),
  22.  
  23. "ww" => array(2016003,"王五","行政部","ww@qq.com"),
  24.  
  25. "zl" => array(2016004,"赵六","销售部","zl@qq.com")
  26.  
  27. );

  

  • 二维数组访问方式:数组都是采用索引访问数组元素。

上机练习1  根据公司提供的各部门员工信息表,构建三维数组

开发部员工信息表

ID

姓名

职位

邮箱

2016001

张三

项目经理

Zs@qq.com

2016002

李四

项目组长

ls@qq.com

2016003

王五

PHP工程师

ww@qq.com

2016004

赵六

UI工程师

zl@qq.com

市场部员工信息表

ID

姓名

职位

邮箱

2016005

小陈

部门经理

lc@qq.com

2016006

小李

渠道经理

ll@qq.com

2016007

小赵

客服经理

zx@qq.com

2016008

小孙

职员

sxm@qq.com

行政部员工信息表

ID

姓名

职位

邮箱

2016009

小刘

总经理

xl@qq.com

2016010

小高

办公司主任

xg@qq.com

2016011

小周

行政

xz@qq.com

2016012

小吴

人事

xw@qq.com

需求说明:

  • 部门二维数组采用字符串索引;
  • 员工信息一维数组采用数值索引。
  • 输出行政部小高的电子邮箱;输出市场部小赵的职位信息。

数组的遍历

PHP采用数组处理数据,在项目中,大量的数据都是采用PHP内置函数写入数组和读取数组中的元素。一般读取数据采用遍历的方式。

使用for语句循环遍历数组

  • PHP中较少采用for语句遍历数组,因为for循环语句通过下标访问数组中的每个成员元素,因此要求数组的下标是连续的索引数字。所以不适用于不连续下标的索引数组和索引为字符串的关联数组。
  • 演示示例  输出二维数组
  1. //员工信息二维数组:默认数字索引方式
  2.  
  3. $employees1=array(
  4.  
  5. array(2016001,"张三","开发部","zs@qq.com"),
  6.  
  7. array(2016002,"李四","市场部","ls@qq.com"),
  8.  
  9. array(2016003,"王五","行政部","ww@qq.com"),
  10.  
  11. array(2016004,"赵六","销售部","zl@qq.com")
  12.  
  13. );

  

使用foreach语句变量数组

foreach是PHP中专门用来遍历数组的语句。使用foreach遍历数组时与数组的下标无关。每读取一个元素,元素指针后移一位。

第一种语法格式:

  1. foreach ( array_expression as $value ) {
  2.  
  3. 循环体
  4.  
  5. }

  

示例代码:

  1. //声明一个无序索引数组
  2.  
  3. $employee=array(3=>2016001,6=>"张三","开发部",6=>"zs@qq.com");
  4.  
  5. //使用foreach遍历数组
  6.  
  7. $count=0;//定义一个计数器,初始化为0
  8.  
  9. foreach ($employee as $value){
  10.  
  11. echo '在数组$employee中第'.$count.'个元素是:'.$value.'<br>';
  12.  
  13. $count++;
  14.  
  15. }

  

第二种语法格式:

  1. foreach ( array_expression as $key => $value ) {
  2.  
  3. 循环体
  4.  
  5. }

  

示例代码:

  1. //声明一个关联数组
  2.  
  3. $employee=array('id'=>2016001,'name'=>"张三",'dept'=>"开发部",'email'=>"zs@qq.com");
  4.  
  5. //使用foreach遍历数组
  6.  
  7. echo '<dl>';
  8.  
  9. foreach ($employee as $key=>$value){
  10.  
  11. echo "<dd>$key:$value</dd>";//输出每个元素的键值
  12.  
  13. }
  14.  
  15. echo '<dl>';

  

上机练习2  根据上机练习1构建的三维数组,使用foreach循环遍历数组,并以table表格组织各部门员工信息输出。

提示:三重循环遍历三维数组

  1. foreach(…){//最外层输出三个部门表格
  2.  
  3. foreach(…){//遍历每张表格的行
  4.  
  5. foreach(…){//遍历每张表格的列
  6.  
  7. }
  8.  
  9. }
  10.  
  11. }

  

联合使用each()、list()和while循环遍历数组

 1.each()

语法格式:

  1. $key => $value each(array_expression) //参数为数组,返回值是一个键值对

  

示例代码:

  1. //声明一个关联数组
  2.  
  3. $employee=array('id'=>2016001,'name'=>"张三",'dept'=>"开发部",'email'=>"zs@qq.com");
  4.  
  5. //使用each()遍历数组
  6.  
  7. $id=each($employee);
  8.  
  9. print_r($id);
  10.  
  11. //返回值
  12.  
  13. Array ( [1] => 2016001 [value] => 2016001 [0] => id [key] => id ) //1和value表示数组元素的值,0和key表示数组元素的索引。读取到数组末端,each返回false。

  

2.   list()

  • list()是php的语法结构,非函数。
  • list()只能用于数字索引的数组,并且数字索引从0开始。
  • 用于操作把数组元素的值赋给list()中的变量。

语法格式:

  1. list(mixed varname,mixed varname ) = array_expression

  

示例代码:

  1. //声明一个索引数组
  2.  
  3. $address=array("中国","福建","厦门","软二");
  4.  
  5. //将数组中元素转换为变量
  6.  
  7. list($country,$province,$city,$local)=$address;
  8.  
  9. //输出list中的变量
  10.  
  11. echo $country.'-'.$province.'-'.$city.'-'.$local;

  

list和each结合使用:

  1. //声明一个关联数组
  2.  
  3. $employee=array('id'=>2016001,'name'=>"张三",'dept'=>"开发部",'email'=>"zs@qq.com");
  4.  
  5. list($key,$value)=each($employee);//将元素下标是0和1的值赋给list;
  6.  
  7. echo $key.'=>'.$value;

  

3. while

采用while循环遍历数组,可以结合list和each,语法格式:

  1. while ( list ( $key,$value ) = each ( array_expression ) ){
  2.  
  3. 循环体;
  4.  
  5. }

  

示例代码:

  1. //声明一个关联数组
  2.  
  3. $employee=array('id'=>2016001,'name'=>"张三",'dept'=>"开发部",'email'=>"zs@qq.com");
  4.  
  5. //输出员工信息
  6.  
  7. echo '<dl><dt>一个员工信息</dt>';
  8.  
  9. while(list($key,$value)=each($employee)){
  10.  
  11. echo '<dd>'.$key.' : '.$value.'</dd>';
  12.  
  13. }
  14.  
  15. echo '</dl>';

  

注意:

  • Foeach循环结束后数组指针重新指向数组第一个元素。
  • Each遍历数组指针会停留在最后一个元素。因此需要reset (array_expression)函数重置数组指针。

4.        使用数组内部指针控制函数遍历数组

PHP提供了一系列操纵数组指针的函数,可以便利访问数组中的元素。

函数

功能描述

current ( )

读取目前指针位置的数据

key ( )

读取目前指针所指向数据的索引值

next ( )

将数组中的内部指针移动到下一个单元

prev ( )

将数组的内部指针倒回一位

end ( )

将数组的内部指针指向最后一个元素

reset()

将目前指针无条件转移到第一个索引位置

示例代码:

  1. // 声明一个一维的关联数组$contact, 使用“=>”运算符指定了每个元素的字符串下标
  2.  
  3. $contact = array (
  4.  
  5. "ID" => 2016001,
  6.  
  7. "姓名" => "张三",
  8.  
  9. "部门" => "开发部",
  10.  
  11. "地址" => "厦门市",
  12.  
  13. "电话" => "(0592)98765432",
  14.  
  15. "EMAIL" => "zs@php.com"
  16.  
  17. );
  18.  
  19. // 数组刚声明时,数组指针在数组中第一个元素位置
  20.  
  21. // 使用key()和current()函数传入数组$contact,返回数组中当前元素的键和值
  22.  
  23. echo '第一个元素:' . key ( $contact ) . ' => ' . current ( $contact ) . '<br>'; // 输出:第一个元素:ID => 1
  24.  
  25. echo '第一个元素:' . key ( $contact ) . ' => ' . current ( $contact ) . '<br>'; // 数组指针没有移动,输出同上
  26.  
  27. next ( $contact ); // 将数组$contact中的指针向下一个元素移动一次,指向第二个元素的位置
  28.  
  29. next ( $contact ); // 将数组$contact中的指针向再下一个元素移动一次,指向第三个元素的位置
  30.  
  31. echo '第三个元素:' . key ( $contact ) . ' => ' . current ( $contact ) . '<br>'; // 输出第三个元素的键和值
  32.  
  33. end ( $contact ); // 再将数组$contact中的指针移动到最后,指向最后一个元素
  34.  
  35. echo '最后一个元素:' . key ( $contact ) . ' => ' . current ( $contact ) . '<br>'; // 输出最后一个元素的键和值
  36.  
  37. prev ( $contact ); // 将数组$contact中的指针倒回一位,指向最后第二个元素
  38.  
  39. echo '最后第二个元素:' . key ( $contact ) . ' => ' . current ( $contact ) . '<br>'; // 输出最后第二个元素的键和值
  40.  
  41. reset ( $contact ); // 再将数组$contact中的指针重置到第一个元素的位置,指向第一个元素
  42.  
  43. echo '又回到了第一个元素:' . key ( $contact ) . ' => ' . current ( $contact ) . '<br>'; //输出第一个元素的键和值

  

上机练习3  使用PHP实现冒泡排序,数据保存在数组中。

需求说明:1、定义整数数组,10个数字,实现冒泡排序。2;给定一个整数数字,插入到已排序好的数组中,找到它的位置,输出该位置索引,插入数字。

预定义数组

PHP4.1.0后续版本中,提供了一系列预定义数组,这些数组的变量包含了来自web服务器、客户端、运行环境和用户输入的数据。这些数组也称为自动全局变量或者超全局变量。这些数组特性如下:

  • 是一种特殊的数组,和普通数组操作方式一样。
  • 无需声明,每个PHP脚本默认存在。
  • 在全局范围内生效。在函数中可以直接使用,而无需使用global关键字访问他们。

1.$_SERVER

说明:存储服务器设定相关变量、当前脚本执行环境上下文变量。

例如:获取客户端IP地址

  1. $_SERVER['REMOTE_ADDR'];

  

2.$_ENV

说明:执行环境提交至脚本的变量数组。$_ENV只是被动的接受服务器端的环境变量并把它们转换为数组元素。

默认情况下, $_ENV会为空,原因是php的配置文件php.ini的配置项为:variables_order = "GPCS"。如果需要显示内容,则需要修改variables_order = "EGPCS"。EGPCS是Environment、Get、Post、Cookies、Server的缩写。

3.$_GET

说明:在服务器页面中通过$_GET超全局数组获取URL或表单GET方式传递过来的参数。

示例:

信息提交页面代码:

  1. <a href="getAction.php?action=getAction&name=tom&pwd=123">getTest</a>
  2.  
  3. 信息处理页面代码:
  4.  
  5. print_r($_GET);

  

4.$_POST

说明:通过HTTP POST方法传递的变量组成的数组。获取方式$_POST[‘表单元素name属性值’]。

示例:如何获取CheckBox表单元素的值。

信息提交页面代码:

  1. <form action="getAction.php" method="post">
  2.  
  3. 运动<input type="checkbox" name="like[]" value="sport">
  4.  
  5. 阅读<input type="checkbox" name="like[]" value="read">
  6.  
  7. 电影<input type="checkbox" name="like[]" value="movic">
  8.  
  9. 逛街<input type="checkbox" name="like[]" value="shopping">
  10.  
  11. 电游<input type="checkbox" name="like[]" value="game">
  12.  
  13. <br>
  14.  
  15. <input type="submit" value="提交"></form>
  16.  
  17. 信息处理页面代码:
  18.  
  19. //print_r($_POST);
  20.  
  21. foreach ($_POST['like'] AS $value){
  22.  
  23. echo $value.'<br>';
  24.  
  25. }

  

5.$_REQUEST

说明:包含了$_POST、$_GET、$_COOKIE中的全部内容。通过$_POST['like']获取请求值,也可以通过$_REQUEST[‘like’]获取。

缺点:速度慢,不推荐使用。

6.$_FILE

说明:专门章节讲解

7.$_COOKIE

说明:专门章节讲解

8.$_SESSION

说明:专门章节讲解

9.$GLOBALS

说明:由所有已定义的全局变量组成的数组,变量名就是该数组的索引。

函数中可以使用$GLOBALS数组替代global关键字。

上机练习4  表单数据提交处理。

数组的相关处理函数

1.数组键/值操作函数

array_values()

说明:返回数组中所有元素的值,并重建索引。适用于数组中下标混乱的数组,或者可以将关联数组转换为索引数组。

示例:

  1. $contact = array (
  2. "ID" => 2016001,
  3. "姓名" => "张三",
  4. "部门" => "开发部",
  5. "地址" => "厦门市",
  6. "电话" => "(0592)98765432",
  7. "EMAIL" => "zs@php.com"
  8. );
  9.  
  10. print_r(array_values($contact));

  

array_keys()

说明:返回数组中所有的键名。

语法格式:

  1. array array_keys(array,value,strict)

  

如果提供了第二个参数,则只返回键值为该值的键名。

如果 strict 参数指定为 true,则 PHP 会使用全等比较 (===) 来严格检查键值的数据类型。

  1. $contact = array (
  2.  
  3. "ID" => 2016001,
  4.  
  5. "NAME" => "张三",
  6.  
  7. "DEPT" => "开发部",
  8.  
  9. "CITY" => "厦门市",
  10.  
  11. "TEL" => "(0592)98765432",
  12.  
  13. "EMAIL" => "zs@php.com"
  14.  
  15. );
  16.  
  17. print_r(array_keys($contact));//输出所有KEY
  18.  
  19. print_r(array_keys($contact,'张三'));//输出张三的key
  20.  
  21. $arr=array(10,20,30,'10');
  22.  
  23. print_r(array_keys($arr,"10",false));//输出10和“10”的key
  24.  
  25. print_r(array_keys($arr,"10",true));//输出“10”的key

  

 in_array()

说明:检查数组中是否存在某个值。

语法格式:

  1. array in_array ( search , array , type )

  

  1. //array_in简单使用形式
  2.  
  3. $os=array('Mac','NT','Trix','Linux');
  4.  
  5. var_dump(in_array("Trix", $os));//true
  6.  
  7. var_dump(in_array("mac", $os));//true
  8.  
  9. //array_in严格类型检查
  10.  
  11. $num=array('1.10',12.4,1.13);
  12.  
  13. var_dump(in_array('12.4', $num,true));//严格检查,输出false
  14.  
  15. //array_in查询二维数组,search参数也可以为数组
  16.  
  17. $num=array(array(1,2),'1.10',12.4,1.13);
  18.  
  19. var_dump(in_array(array(1,2), $num));//true

  

扩展方法:array_search()、array_key_exists()、isset()

array_flip()

说明:交换数组中的键和值,返回反转后的数组。如果一个值出现多次,则最后一个键名作为它的值,覆盖前面出现的元素。如果原来数组中的值的数据类型不是字符串或者整数,函数将报错。

示例:

  1. $lamp = array (
  2.  
  3. "OS" => "Linux",
  4.  
  5. "WebServer" => "Apache",
  6.  
  7. "Database" => "MySQL",
  8.  
  9. "Language" => "PHP"
  10.  
  11. );
  12.  
  13. print_r ( array_flip ( $lamp ) );
  14.  
  15. $trans = array ( "a" => 1,"b" => 1,"c" => 2 );
  16.  
  17. print_r ( array_flip ( $trans ) );

  

 array_reverse()

说明:函数将原数组中的元素顺序翻转,创建新的数组并返回。如果第二个参数指定为 true,则元素的键名保持不变,否则键名将丢失。

语法格式:

2.统计数组元素的个数和唯一性

count()

同sizeof()一样,用来统计数组元素的数目,或者对象中属性的个数。

示例:

  1. $lamp = array("Linux", "Apache", "MySQL", "PHP");
  2.  
  3. echo count($lamp); //输出数组的个数为:4
  4.  
  5. //声明一个二维数组,统计数组中元素的个数
  6.  
  7. $web= array('lamp' => array('Linux', 'Apache', 'MySQL','PHP'),
  8.  
  9. 'j2ee' => array('Unix', 'Tomcat','Oracle','JSP'));
  10.  
  11. echo count($web, 1);
  12.  
  13. //第二个参数的模式为1则计算多维数组的个数,输出10
  14.  
  15. echo count($web);
  16.  
  17. //默认模式为0,不计算多维数组的个数,输出2

  

array_count_values()

示例:

  1. //声明一个带有重复值的数组
  2.  
  3. $array = array(1, "php", 1, "mysql", "php");
  4.  
  5. //统计数组$array中所有值出现的次数
  6.  
  7. $newArray=array_count_values ($array);
  8.  
  9. print_r($newArray);
  10.  
  11. //输出:Array([1] => 2 [php] => 2 [mysql] => 1)

  

array_unique()

定义和用法:

array_unique() 函数移除数组中的重复的值,并返回结果数组。

当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除。

返回的数组中键名不变。

注释:被保留的数组将保持第一个数组项的键名类型。

示例:

  1. //声明一个带有重复值的数组
  2.  
  3. $a=array("a"=>"php","b"=>"mysql","c"=>"php"); print_r(array_unique($a));
  4.  
  5. //删除重复值后输出:Array ([a] => php [b] => mysql)

  

3.使用回调函数处理数组的函数

array_filter()

说明:用回调函数过滤数组中的元素,返回按用户自定义函数过滤后的新数组。

格式说明:

  1. array array_filter ( array input [, callback callback ] )

第一个参数:被过滤的数组,必选项

第二个参数:用户自定义函数名以字符串形式传入。如果自定义函数返回true,则被操作的数组的当前值就会被包含在返回的结果数组中,并将结果组成一个新数组。如果原数组是关联数组,则键名保持不变。

示例:

  1. //自定义函数myFun,如果参数能被2整除则返回真
  2.  
  3. function myFun($var){
  4.  
  5. if($var % 2 == 0)
  6.  
  7. return true;
  8.  
  9. }
  10.  
  11. //声明值为整数序列的数组
  12.  
  13. $array = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
  14.  
  15. //使用函数array_filter()将自定义的函数名以字符串的形式传给第二个参数
  16.  
  17. print_r(array_filter($array, "myFun"));
  18.  
  19. //过滤后的结果输出Array ( [b] => 2 [d] => 4 )

  

array_walk()

说明:对数组中的每个元素应用回调函数处理。成功返回true,否则返回false。

语法格式:

  1. Bool array_walk(array &array,callback funname[,mixed userdata])

第一个参数:传入的数组。

第二个参数:回调函数名称字符串。自定义函数接收两个参数,分别是数组元素的的值和键名。

第三个参数:用户自定义变量。

如果自定义函数需要的参数比传入的多,则会报错,采用@或者error_reporting() 函数抑制错误。

如果回调函数需要直接作用于数组中的值,可以将回调函数的第一个参数指定为引用:&$value。

  1. //定义一个回调函数接收两个参数
  2.  
  3. function myFun1($value,$key) {
  4.  
  5. //将参数连接在一超输出
  6.  
  7. echo "The key $key has the value $value<br>"; }
  8.  
  9. //定义一个数组$lamp
  10.  
  11. $lamp=array("a"=>"Linux","b"=>"Apache","c"=>"Mysql","d"=>"PHP");
  12.  
  13. //使用array_walk函数传入一个数组和一个回调函数
  14.  
  15. array_walk($lamp,"myFun1");
  16.  
  17. /* 执行后输出如下结果:
  18.  
  19. The key a has the value Linux
  20.  
  21. The key b has the value Apache
  22.  
  23. The key c has the value MySQL
  24.  
  25. The key d has the value PHP */
  26.  
  27. //自定义一个回调函数需要接受三个参数
  28.  
  29. function myFun2($value,$key,$p) {
  30.  
  31. //将三个参数连接后输出
  32.  
  33. echo "$key $p $value <br>";
  34.  
  35. }
  36.  
  37. //使用array_walk函数传入三个参数
  38.  
  39. array_walk($lamp,"myFun2","has the value");
  40.  
  41. /*执行后输出如下结果:
  42.  
  43. a has the value Linux
  44.  
  45. b has the value Apache
  46.  
  47. c has the value MySQL
  48.  
  49. d has the value PHP */
  50.  
  51. //改变数组元素的值(请注意 &$value传入引用)
  52.  
  53. function myFun3(&$value,$key) {
  54.  
  55. $value="Web"; //将改变原数组中每个元素的值
  56.  
  57. }
  58.  
  59. //使用array_walk函数传入两个参数,其中第一个参数为引用
  60.  
  61. array_walk($lamp,"myFun3");
  62.  
  63. print_r($lamp);
  64.  
  65. //输出:Array ( [a] => Web [b] => Web [c] => Web [d] => Web )

  

array_map()

array_map()和array_walk()功能相似,但是比array_walk()功能强大,可以处理多个数组。将回调函数作用于给定数组元素上,返回用户自定义函数作用后的数组。

语法格式:

  1. array array_map ( callback callback , array arr1 [, array …])

  

第一个参数:用户自定义回调函数名称字符串,或者null

第二个参数:输入需要处理的数组,也可以是多个数组。

示例:

  1. //自定义一个函数作为回调函数,接收数组中每个元素做为参数
  2.  
  3. function myFun1($v) {
  4.  
  5. //如果数组中元素的值恒等于MySQL条件成功
  6.  
  7. if ($v==="MySQL") {
  8.  
  9. return "Oracle"; //返回Oracle
  10.  
  11. }
  12.  
  13. return $v; //不等于MySQL的元素都返回传入的值,即原型返回
  14.  
  15. }
  16.  
  17. //声明一个有4个元素的数组$lamp
  18.  
  19. $lamp=array("Linux","Apache","MySQL","PHP");
  20.  
  21. //使用array_map()函数传入一个函数名和一个数组参数
  22.  
  23. print_r(array_map("myFun1",$lamp));
  24.  
  25. /*上面程序执行后输出
  26.  
  27. Array ( [0] => Linux [1] => Apache [2] => Oracle [3] => PHP ) */
  28.  
  29. //使用多个参数, 回调函数接受的参数数目应该和传递给array_map()函数的数组数目一致
  30.  
  31. //自定义一个函数需要两个参数,两个数组中的元素依次传入
  32.  
  33. function myFun2($v1,$v2) {
  34.  
  35. if ($v1===$v2) { //如果两个数组中的元素值相同则条件成功
  36.  
  37. return "same"; //返回same, 说明两个数组中对应的元素值相同
  38.  
  39. }
  40.  
  41. //如果两个数组中对应的元素值不同,返回different
  42.  
  43. return "different";
  44.  
  45. }
  46.  
  47. //声明数组$a1,有三个元素
  48.  
  49. $a1=array("Linux","PHP","MySQL");
  50.  
  51. //数组$a第二个元素值和$a中第二个元素的值相同
  52.  
  53. $a2=array("Unix","PHP","Oracle");
  54.  
  55. //使用array_map()函数传入多个数组
  56.  
  57. print_r(array_map("myFun2",$a1,$a2));
  58.  
  59. /*上面程序执行后输出:
  60.  
  61. Array ( [0] => different [1] => same [2] => different ) */
  62.  
  63. //当自定义函数名设置为 null 时的情况
  64.  
  65. $a1=array("Linux","Apache"); //声明一个数组$a1, 有两个元素
  66.  
  67. $a2=array("MySQL","PHP"); //声明另一个数组$a2,也有两个元素
  68.  
  69. //通过第一个参数设置为NULL,构造一个数组的数组
  70.  
  71. print_r(array_map(null,$a1,$a2));
  72.  
  73. /*上面程序执行后输出:
  74.  
  75. Array ( [0] => Array ( [0] => Linux [1] => MySQL )
  76.  
  77. [1] => Array ( [0] => Apache [1] => PHP ) ) */

  

4.数组的排序函数

排序函数

说明

sort()

数组的值有小到大排序

rsort()

数组的值由大到小排序

usort()

使用用户自定义的回调函数对数组排序

asort()

对数组有小到大排序,并保持索引关系

arsort()

对数组有大到小排序,并保持索引关系

uasort()

使用用户自定义的回调函数对数组中的值排序并保持索引关系

ksort()

按照键名对数组对数组进行由小到大排序,并保持原来的键

krsort()

按照键名对数组对数组进行由大到小排序,并保持原来的键

uksort()

使用用户自定义的比较回调函数对数组中键名进行排序

natsort()

用自然顺序算法对给定数组中的元素排序

natcasesort()

用不区分大小写的自然顺序算法对给定数组中的元素排序

array_multisort()

对多个数组或多维数组进行排序

上机练习5  查询表格中数组排序函数的用法。

需求说明:

  1. 函数语法格式
  2. 各个参数和返回值说明
  3. 示例代码

5.拆分、合并、分解和接合数组相关函数

array_slice()

array_slice() 函数在数组中根据条件取出一段值,并返回。

array_splice()

array_splice() 函数从数组中移除选定的元素,并用新元素取代它。该函数也将返回包含被移除元素的数组。如果函数没有移除任何元素(length=0),则将从 start 参数的位置插入被替换数组。不保留被替换数组中的键名。

array_splice() 函数与 array_slice() 函数类似,选择数组中的一系列元素,但不返回,而是删除它们并用其它值代替。如果提供了第四个参数,则之前选中的那些元素将被第四个参数指定的数组取代。

最后生成的数组将会返回。

 array_combine()

array_combine() 函数通过合并两个数组来创建一个新数组,其中的一个数组是键名,另一个数组的值为键值。键名数组和键值数组的元素个数必须相同!

如果其中一个数组为空,或者两个数组的元素个数不同,则该函数返回 false。

array_merge()

把一个或多个数组合并为一个数组。

提示:您可以向函数输入一个或者多个数组。

注释:如果两个或更多个数组元素有相同的键名,则最后的元素会覆盖其他元素。

注释:如果您仅向 array_merge() 函数输入一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引。

提示:该函数与 array_merge_recursive() 函数之间的不同是在处理两个或更多个数组元素有相同的键名的情况。array_merge_recursive() 不会进行键名覆盖,而是将多个相同键名的值递归组成一个数组。

array_intersect()

array_intersect() 函数用于比较两个(或更多个)数组的键值,并返回交集。

该函数比较两个(或更多个)数组的键值,并返回交集数组,该数组包括了所有在被比较的数组(array1)中,同时也在任何其他参数数组(array2 或 array3 等等)中的键值。

说明:array_intersect() 函数返回两个或多个数组的交集数组。

结果数组包含了所有在被比较数组中,也同时出现在所有其他参数数组中的值,键名保留不变。

注释:仅有值用于比较。

array_diff()

array_diff() 函数返回两个数组的差集数组。该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的键值。在返回的数组中,键名保持不变。

6.数组与数据结构

使用数组实现堆栈

堆栈的数据存储特点:后进先出

实现方法:

Array_push():数组最后位置添加元素;

Array_pop():删除最后一个元素;

使用数组实现队列

队列的数据存储特点:先进先出

Array_push():数组最后位置添加元素;

Array_shift():删除数组第一个元素。

其他数组处理函数

  • array_rand()
  • shuffle()
  • array_sum()
  • range()

PHP操作数组需要注意的细节

数组运算符号

  • + 运算符把右边的数组元素(除去键值与左边的数组元素相同的那些元素)附加到左边的数组后面,相同下标的元素取左边数组元素的值。

删除数组中的元素

  • 删除第一个:Array_shift()
  • 删除最后一个:array_pop()
  • 删除任意位置元素:unset[index]。(注意:无法重置索引)

PHP08 数组和数据结构的更多相关文章

  1. php数组·的方法-数组与数据结构

    /*数组与数据结构*/ //shuffle() 随机打乱数组 //array_push() 数组末尾添加元素 //array_pop() 数组末尾删除元素 //array_shift() 数组首位删除 ...

  2. 5_PHP数组_3_数组处理函数及其应用_8_数组与数据结构

    以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. 数组与数据结构 1. array_push() 函数 程序: <?php $stack = array(&q ...

  3. 一篇文章让你了解动态数组的数据结构的实现过程(Java 实现)

    目录 数组基础简单回顾 二次封装数组类设计 基本设计 向数组中添加元素 在数组中查询元素和修改元素 数组中的包含.搜索和删除元素 使用泛型使该类更加通用(能够存放 "任意" 数据类 ...

  4. php的数组与数据结构

    一.数组的分类与定义 分类: 1.索引数组  $array = array(1,2,3,4,5); 2.关联数组  $array=array(1=>"aa","bb ...

  5. PHP——数组和数据结构

    <body> <?php $arr[0]=5;//赋值定义 $arr[1]="aa"; print_r($arr); echo "<br /> ...

  6. PHP数组和数据结构(下)未完。。。。

    1.数组的遍历 (1)each(): 接受一个数组作为参数,返回数组中当前元素的键/值对,并向后移动数组指针到下一个元素的位置 键/值对被返回为带有四个元素的关联和索引混合的数组,键名分别为0,1,k ...

  7. PHP数组和数据结构(上)

    1.数组的声明 两种方法: 直接给数组元素赋值 使用array()函数声明 说明: (1)索引数组的下标可以是非连续的值,只要在初始化时指定非连续的下标值即可 如果指定的下标值已经声明过,则属于对变量 ...

  8. 算法求解中的变量、数组与数据结构(STL 中的容器)

    本质上算法都是对数据的操作,没有数据,没有存储数据的容器和组织方式,算法就是无源之水无本之木,就是巧妇也难为无米之炊.算法是演员,变量.数组.容器等就是舞台, 然后整个算法的处理流程,都是针对这些数据 ...

  9. 递归遍历多维数组(树数据结构)的超级简单方式,并且可以递归超过200层,摘自<<PHP精粹:编写高效PHP代码>>

    <?php $array = array( "Hello", // Level 1 array( "World" // Level 2 ), array( ...

随机推荐

  1. 【201】SeaDAS代码

    参考: 官方网站:http://seadas.gsfc.nasa.gov/ L2GEN User's Guide l2gen 代码: l2gen, ifile="ifile", g ...

  2. 你真的懂了redis的数据结构吗?redis内部数据结构和外部数据结构揭秘

    原文链接:https://mp.weixin.qq.com/s/hKpAxPE-9HJgV6GEdV4WoA Redis有哪些数据结构? 字符串String.字典Hash.列表List.集合Set.有 ...

  3. IDEA thymeleaf ${xxx.xxx}表达式报错,红色波浪线

    解决方法: 在<!DOCTYPE html>标签下面加上 <!--suppress ALL--> 代码如图: 不再报错,效果如下图:

  4. 第六篇 .NET高级技术之拆箱装箱

    拆箱.装箱 值类型赋值给Object类型变量的时候,会发生装箱:包装成Object.ValueType不也是继承自Object吗(CLR内部处理): Object类型变量赋值给值类型赋值的时候会发生拆 ...

  5. Redis生成主键ID

    使用Redis來生成主鍵ID策略,這裡主要使用 RedisAtomicLong 類來實現主鍵生成策略.具體代碼如下: /** * @Description: 获取自增长值 * @param key k ...

  6. 跟我一起玩Win32开发(13):握手对话框

    一提到对话框,相信对它熟悉的人不在少数,更不用说码农们了,你可能会问,对话框和窗口有什么区别吗?本质上是没有区别的,对话框也是一种窗口(前面也说过,控件也可视为子窗口). 最简单的对话框要数Messa ...

  7. c++中的虚函数是什么东西?

    #include <iostream> #include<string> #include<vector> using namespace std; class A ...

  8. 数据库sql 使用 lag 和OVER 函数和 like 使用 小技巧

    1. sample 1: Lag()就是取当前顺序的上一行记录.结合over就是分组统计数据的.Lag()函数,就是去上N行的字段的数据. SQL> select * from x; A---- ...

  9. bash 变量传递方法

    ###1.sh    ##(该sh 目的是 将变量env传入env.sh, 同时让env.sh在当前事物生效,最后执行env.sh 定义的变量envs) export ENV=prepareecho ...

  10. CF 602 D. Lipshitz Sequence 数学 + 单调栈 + 优化

    http://codeforces.com/contest/602/problem/D 这题需要注意到的是,对于三个点(x1, y1)和(x2, y2)和(x3, y3).如果要算出区间[1, 3]的 ...