PHP数组的用法(非常全面,附带实例)
如果用户有一个项目列表如汽车品牌列表,那么在单个变量中存储这些汽车品牌名称的格式如下:
$cars1="BYD"; $cars2="Chery"; $cars3="Geely";不过假如希望对变量进行遍历并找出特定值,或者需要存储 300 个汽车品牌,而不是仅存储 3 个汽车品牌,要如何解决呢?解决方法是创建数组。
数组能够在单个变量中存储多个值,并且能够通过引用下标号来访问某个值。
数组是把一系列数据组织起来,形成的可操作的整体。数组的每个实体都包含键和值。
PHP数组的分类
1、根据数据类型进行数组分类
在 PHP 中,数组的键名可以是任意一个整型数值,也可以是一个字符或字符串,而不像 C语言,只可以是数值。根据数组键名的不同,PHP 数组常分为以下两种类型。
1) 索引数组
以数字为键名的数组称为索引数组。PHP 索引数组默认键名从 0 开始,并且不需要特别指定键名,PHP 会自动为索引数组的键名赋予一个值,然后从这个值开始自动增量。【实例 1】默认键名,并输出数组元素。
<?php $name=Array("PHP","JSP","ASP"); echo "$name[0]{$name[1]}{$name[2]}"; ?>运行结果为:
PHPJSPASP
【实例 2】修改键名,连续的键名,并输出数组元素。
<?php $name=Array(3=>"PHP","JSP","ASP"); echo "$name[3]{$name[4]}{$name[5]}"; ?>运行结果为:
PHPJSPASP
【实例 3】修改键名,不连续的键名,并输出数组元素。
<?php $name=Array(3=>"PHP",5=>"JSP",7=>"ASP"); echo "$name[3]{$name[5]}{$name[7]}"; ?>运行结果为:
PHPJSPASP
由上述 3 个例子可以总结出索引数组的键名默认从 0 开始,如果指定键名,则指定的键名可以是连续的键名,也可以是不连续的键名。
2) 关联数组
以字符串的形式或字符串和数字混合的形式为键名的数组被称为关联数组。关联数组的键名可以是数字和字符串混合的形式,而不像索引数组的键名,只能为数字。在一个数组中,只要在键名中出现非数字的字符串,那么这个数组就叫作关联数组。
【实例 4】关联数组的定义
<?php $age=Array("Bill"=>"35","Steve"=>"37","Peter"=>"43"); echo "Peter is " . $age['Peter'] . " years old."; ?>运行结果为:
Peter is 43 years old.
2、根据数组维度进行数组分类
根据数组的维度,数组可以分为一维数组、二维数组和多维数组。超过二维的数组统称多维数组。1) 一维数组
一维数组是最普通的数组,只保存一列数据。2) 二维数组
一维数组都是单一的键名/键值对。如果想在一个键名中保存更多的值,那么可以使用二维数组或多维数组。二维数组本质上是以数组为数组元素的数组,二维数组及多维数组可以被看作一维数组的多次叠加。【实例 5】二维数组的定义。
<?php header("content-type:text/html;charset=utf-8"); $student=Array( "张三"=>Array("性别"=>"男","年龄"=>18,"地址"=>"海口"), "李四"=>Array("性别"=>"女","年龄"=>19,"地址"=>"山西"), "王五"=>Array("性别"=>"男","年龄"=>17,"地址"=>"湖北") ); echo $student["张三"]["性别"];//输出张三的性别为:男 ?>
二维数组除了上述的创建方式外,还有以下创建方式:
<?php header("content-type:text/html;charset=utf-8"); $student=Array( ); $student["张三"]["性别"]= "男" ; $student["张三"]["年龄"]= 18 ; $student["张三"]["地址"]= "海口" ; $student["李四"]["性别"]= "女" ; $student["李四"]["年龄"]= 19 ; $student["李四"]["地址"]= "山西" ; $student["王五"]["性别"]= "男" ; $student["王五"]["年龄"]= 17 ; $student["王五"]["地址"]= "湖北" ; ?>
3) 多维数组
PHP 中可以创建更多维的数组,例如四维数组、五维数组,甚至更高维数的数组。在系统中,程序员很少使用三维以上维数的数组,因为随着维数的增加,数组的操作复杂度会大幅提升。
PHP数组的创建
1) 以直接赋值的方式创建数组
基本语法如下:$Arrayname[<key>]=value其中,$Arrayname 表示数组名,key 表示键名,value 表示键值。键名可以省略。
【实例 6】以直接赋值的方式创建数组。
<?php $booklist[]="PHP"; $booklist[]="ASP"; $booklist[]="JSP"; ?>上述实例省略了键名,系统会使用默认的键,从 0 开始,依次类推。
【实例 7】以指定键名的方式创建数组。
<?php header("content-type:text/html;charset=utf-8"); $booklist[]="PHP"; $booklist[4]="ASP"; $booklist[]="JSP"; $booklist["名著"]="西游记"; $booklist["名著"]="水浒传"; $booklist["小说"]="人生若只如初见"; print_r($booklist); echo "<br>"; echo $booklist["名著"]."<br>"; echo $booklist[5]; ?>运行结果为:
Array
(
[0] => PHP
[4] => ASP
[5] => JSP
[名著] => 水浒传
[小说] => 人生若只如初见
)
水浒传
JSP
- 在创建数组时,键名可以指定为数字,也可以指定为字符串,还可以混合使用数字与字符串;
- 如果指定的键名是数字,则省略后边的键名时,键名会在前面键名的基础上增加 1;
- 如果指定的键名相同,则后边的键值会覆盖前边的键值。
2) 使用Array()函数创建数组
基本语法如下:$Arrayname=Array(value1[,value2][,value3][,…]);
【实例 8】使用Array()函数创建数组。
<?php $booklist=Array("PHP",4=>"ASP",JSP,"名著"=>"西游记","名著"=>"水浒传","小说"=>"人生若只如初见"); ?>
3) 使用range()函数创建数组
使用 range() 函数创建一个包含指定范围内全部元素的数组,基本语法如下:Array range(mixed low,mixed high,[number step]);该函数返回数组中从 low 到 high 的全部元素,其中包含它们本身。
当 low<high 时,序列为从 low 到 high;当 low>high 时,序列为从 high 到 low。step 是一个可选参数,它的值是正值。如果指定该参数的值,它将作为元素之间的步长值;如果未指定该参数的值,step的默认值为1。
【实例 9】使用 range() 函数创建数组。
<?php $arr=range(1,10); print_r($arr); echo "<br>"; $arr1=range(1,10,3); print_r($arr1); ?>运行结果为:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
[9] => 10
)
Array
(
[0] => 1
[1] => 4
[2] => 7
[3] => 10
)
【实例 10】使用 range() 函数创建数组。
<?php $arr=range("a","h"); print_r($arr); echo "<br>"; $arr1=range("z","a",4); print_r($arr1); ?>运行结果为:
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
[5] => f
[6] => g
[7] => h
)
Array
(
[0] => z
[1] => v
[2] => r
[3] => n
[4] => j
[5] => f
[6] => b
)
PHP追加数组
追加数组是指在已经存在的数组的基础上添加新的数组元素。追加数组有 3 种方式:
- 第 1 种方式是直接添加数组元素;
- 第 2 种方式是使用 Array_push() 函数添加数组元素;
- 第 3 种方式是使用 Array_unshift() 函数添加数组元素。
1) 直接添加数组元素
基本语法如下:$Arrayname[<key>]=value
【实例 11】直接添加数组元素。
<?php header("content-type:text/html;charset=utf-8"); $booklist=Array("PHP",4=>"ASP","JSP","名著1"=>"西游记","名著2"=>"水浒传","小说"=>"人生若只如初见"); $booklist["名著3"]= "红楼梦"; print_r($booklist); ?>运行结果为:
Array
(
[0] => PHP
[4] => ASP
[5] => JSP
[名著1] => 西游记
[名著2] => 水浒传
[小说] => 人生若只如初见
[名著3] => 红楼梦
)
2) 使用Array_push()函数添加数组元素
基本语法如下:int Array_push(Array $Array,mixed var[,mixed…])
【实例 12】创建数组,并使用Array_push()函数添加数组元素。
<?php header("content-type:text/html;charset=utf-8"); $booklist=Array("PHP",4=>"ASP","JSP","名著1"=>"西游记","名著2"=>"水浒传","小说"=>"人生若只如初见"); Array_push($booklist,"JAVA","红楼梦"); print_r($booklist); ?>运行结果为:
Array
(
[0] => PHP
[4] => ASP
[5] => JSP
[名著1] => 西游记
[名著2] => 水浒传
[小说] => 人生若只如初见
[6] => JAVA
[7] => 红楼梦
)
3) 使用Array_unshift()函数添加数组元素
Array_unshift() 函数用于在数组开头插入一个或多个元素,并返回 Array 数组的新元素数目。基本语法如下:int Array_unshift(Array $Array,mixed var[,mixed…]);
【实例 13】在数组头部添加数组元素。
<?php header("content-type:text/html;charset=utf-8"); $booklist=Array("PHP",4=>"ASP","JSP","名著1"=>"西游记","名著2"=>"水浒传","小说"=>"人生若只如初见"); Array_unshift($booklist,"JAVA","红楼梦"); print_r($booklist); ?>运行结果为:
Array
(
[0] => JAVA
[1] => 红楼梦
[2] => PHP
[3] => ASP
[4] => JSP
[名著1] => 西游记
[名著2] => 水浒传
[小说] => 人生若只如初见
)
- Array_push() 函数在数组尾部添加元素,Array_unshift() 函数在数组头部添加元素;
- Array_push() 函数添加元素的键名会在原来的数值键名的基础上增加 1,所有的文字键名保持不变;Array_unshift() 函数则不同,所有的数值键名将会从 0 开始重新计数,所有的文字键名保持不变。
PHP修改数组
修改数组元素和访问数组的方法一样,都需要使用指定数组的键名,然后将对应的键值修改为新的键值。【实例 14】修改数组中的元素值。
<?php header("content-type:text/html;charset=utf-8"); $booklist=Array("PHP",4=>"ASP","JSP","名著1"=>"西游记","名著2"=>"水浒传","小说"=>"人生若只如初见"); $booklist["小说"]="何以笙箫默"; print_r($booklist); ?>运行结果为:
Array
(
[0] => PHP
[4] => ASP
[5] => JSP
[名著1] => 西游记
[名著2] => 水浒传
[小说] => 何以笙箫默
)
PHP删除数组
删除数组是指利用 PHP 提供的内置函数删除数组中的指定元素,当然也可以利用自定义函数删除数组中的元素。1) 删除数组中的首个元素
使用 Array_shift() 函数可以删除数组中的第一个元素,基本语法如下:mixed Array_shift(Array $Array);
【实例 15】删除数组中的首个元素。
<?php header("content-type:text/html;charset=utf-8"); $booklist=Array("PHP",4=>"ASP","JSP","名著1"=>"西游记","名著2"=>"水浒传","小说"=>"人生若只如初见"); Array_shift($booklist); print_r($booklist); ?>运行结果为:
Array
(
[0] => ASP
[1] => JSP
[名著1] => 西游记
[名著2] => 水浒传
[小说] => 人生若只如初见
)
2) 删除数组中的末尾元素
使用 Array_pop() 函数可以删除数组中的最后一个元素,基本语法如下:mixed Array_pop(Array $Array)
【实例 16】删除数组中的末尾元素。
<?php header("content-type:text/html;charset=utf-8"); $booklist=Array("PHP",4=>"ASP","JSP","名著1"=>"西游记","名著2"=>"水浒传","小说"=>"人生若只如初见"); Array_pop($booklist); print_r($booklist); ?>运行结果为:
Array
(
[0] => PHP
[4] => ASP
[5] => JSP
[名著1] => 西游记
[名著2] => 水浒传
)
3) 删除数组中指定键名的元素
使用 unset() 函数可以删除数组中指定键名的元素。【实例 17】删除数组中指定键名的元素。
<?php header("content-type:text/html;charset=utf-8"); $booklist=Array("PHP",4=>"ASP","JSP","名著1"=>"西游记","名著2"=>"水浒传","小说"=>"人生若只如初见"); unset($booklist["名著1"]); print_r($booklist); ?>运行结果为:
Array
(
[0] => PHP
[4] => ASP
[5] => JSP
[名著2] => 水浒传
[小说] => 人生若只如初见
)
删除函数的对比如下表所示:
函数 | 删除位置 | 返回值 | 影响 |
---|---|---|---|
Array_shift() | 删除首个元素 | 被移除的首个元素 | 数字键名从 0 开始重新计数 |
Array_pop() | 删除末尾元素 | 被移除的末尾元素 | 数字键名保持不变 |
unset() | 删除指定键名的元素 | 无返回值 | 数字键名保持不变 |
4) 自定义函数删除数组元素
【实例 18】自定义函数删除数组元素,并输出删除前和删除后的元素。<?php header("content-type:text/html;charset=utf-8"); function bookRemove(&$Array,$offset,$length=1) { return Array_splice($Array,$offset,$length); } $booklist=Array("PHP",4=>"ASP","JSP","名著1"=>"西游记","名著2"=>"水浒传","小说"=>"人生若只如初见"); echo "删除前的元素<br>"; print_r($booklist); echo "<br>"; echo "删除后的元素<br>"; bookRemove($booklist,1,3); print_r($booklist); ?>运行结果为:
删除前的元素Array
(
[0] => PHP
[4] => ASP
[5] => JSP
[名著1] => 西游记
[名著2] => 水浒传
[小说] => 人生若只如初见
)
删除后的元素Array
(
[0] => PHP
[名著2] => 水浒传
[小说] => 人生若只如初见
)