数组的分类:
数组的本质是存储、管理和操作一组变量,数组也是php提供的八种数据类型中的其中一种,属于复合数据类型。
数组分为两大类:索引数组(indexed)和关联数组(associative)
索引数组的索引值是整数,在大多数编程语言中,数组都具有数字索引,从0开始,依次递增。通过位置来标识数组元素时,可以使用索引数组。
关联数组以字符串作为索引值。在其他编程语言中很少见,但在php中使用以字符串作为下标的关联数组很方便,当通过名称来标识数组元素时,可以使用关联数组。
数组的定义:
以直接赋值的方式声明数组
$数组变量名[下标]=资料内容 //其中索引值(下标)可以是字符串或者一个整数
例如:$array[0]="111"; 或者$array['0']="2222";
使用array()语言结构新建数组
$数组变量名=array(key1=>value1,.....keyN=>valueN);
如果不使用"=>"符号指定下标,默认为索引数组,默认的索引值也是从0开始递增的整数
如果使用array()结构在初始化数组时不希望使用默认的索引值,就可以使用"=>"运算符指定非连续的索引值
数组简写语法:
通过中括号[]定义数组
<?php
//php 5.4版以后可以这么写,新增的数组简写语法。
$day=[1,'周一','早上','上班','吃饭'];
// php 5.3版及以前的版本不接受这么写...
$day=array(1,'周一','早上','上班','吃饭');
?>
多维数组的声明:
<?php
$array=array(
array(1,'周一','早上','上班','吃饭'),
array(2,'周二','早上','上班','吃饭')
);
?>
遍历数组
- 使用for循环遍历数组(不常用)
- 联合使用list()、each()和while循环遍历数组(不常用)
- 使用foreach语句遍历数组(常用)
第一种语法格式:
foreach(array_expression as $value){
循环体
}
第二种语法格式:
foreach(array_expression as $key => $value){
循环体
}
例:
<?php
$wage = array(
"市场部" => array(
array(1, "高某", "市场部经理", 5000.00),
array(2, "洛某", "职员", 3000.00),
array(3, "峰某", "职员", 2400.00),
),
"产品部" => array(
array(1, "李某", "产品部经理", 6000.00),
array(2, "周某", "职员", 4000.00),
array(3, "吴某", "职员", 3200.00),
),
"财务部" => array(
array(1, "郑某", "财务经理", 6000.00),
array(2, "王某", "职员", 4000.00),
array(3, "冯某", "职员", 1500.00),
)
);
//使用三层foreach语句嵌套遍历三维数组,输出三张表格
foreach($wage as $key => $value){ //最外层foreach语句遍历出三张表格,遍历出键和值
echo '<table border="1" width="600" align="center">';
echo '<caption><h2>'.$key. '10月工资表</h2><caption>';
echo '<tr bgcolor="#ddddd"><th>编号</th><th>姓名</th><th>职称</th><th>工资</th></tr>';
foreach($value as $row){ //中层foreach语句遍历出每个表格的行
echo '<tr>';
foreach($row as $col){ //内层foreach语句遍历出每个表格的列
echo '<td align="center">' .$col. '</td>';
}
echo '</tr>';
}
echo '</table><br>';
}
?>
结果:
预定义数组
1、服务器变量:$_SERVER
$_SERVER是一个包含诸如头信息、路径和脚本位置的数组。数组的实体由web服务器创建,并不能保证所有的服务器都能产生所有的信息,服务器可能忽略了一些信息,或者产生了一些其他的新的信息。和其他的超全局数组一样,这是一个自动的全局变量,在所有的脚本中都有效,在函数或对象的方法中不需要使用global关键字访问它。
2、环境变量:$_ENV
$_ENV数组中的内容是在PHP解析器运行时,从PHP所在服务器中的环境变量转变为PHP全局变量的。它们中许多都是由PHP所运行的系统决定的,完整的列表是不可能的,需要查看PHP所在服务器的系统文档以确定其特定的环境变量。
3、URL GET 变量:$_GET
$_GET数组也是超全局变量数组,是通过URL GET方法传递的变量组成的数组。它属于外部变量,即在服务器页面中通过$_GET超全局数据获取URL或表单的GET方式传递过来的参数。
4、HTTP POST变量:$_POST
$_POST数组是通过HTTP POST方法传递的变量组成的数组。$_POST和$_GET数组之一都可以保存表单提交的变量,使用哪一个数组取决于提交表单时在表单form标记中的method属性使用的方法是post还是get。但是使用$_POST数组只能访问以post方法提交的表单数据。
5、request变量:$_REQUEST
此关联数组包含$_GET、$_POST和$_COOKIE中全部的内容,但是其速度比较慢,所以不推荐使用。
6、HTTP文件上传变量:$_FILES
使用表单的file输入域上传文件时,必须使用post提交。但在服务器文件中,并不能通过$_POST超全局数组获取到表单中file域的内容。而$_FILES超全局变量是通过post方法传递的已上传文件项目组成的数组。$_FILES是一个二维数组,包含5个子数组元素,其中第一个下标是表单中file输入域的名称,第二个下标用于描述上传文件的属性。
7、HTTP Cookies :$_COOKIE
$_COOKIE超全局数组是经由HTTP Cookies方法提交至脚本的变量。通常这些Cookies是由以前执行的PHP脚本通过setCookies()函数设置到客户端浏览器中的,当PHP脚本从客户浏览器提取了一个cookie后,它将自动把它转换成一个变量,可以通过这个$_COOKIE超全局数组和cookie的名称来存取指定的cookie值。
8、Session变量:$_SESSION
会话控制是在服务器端使用session跟踪用户,当服务器页面中使用session_start()函数开启session后,就可以使用$_SESSION数组注册全局变量,用户就可以在整个网站中访问这些会员信息。
9、Global变量:$GLOBALS
$GLOBALS是由所有已定义的全局变量组成的数组,变量名就是该数组的索引。
数据的相关处理函数
1、array_values()
array_values()函数的作用是返回数组中所有元素的值
2、array_keys()
array_keys()的作用是返回数组中的所有键名
3、in_array()
bool in_array(mixed neefle,array haystack[, bool strict]);
in_array()函数的作用是检查数组中是否存在某个值,即在数组中搜索给定的值
4、count()
函数count()的作用是计算数组中的元素数目或对象的属性个数
int count($var[,int mode]);
5、array_unique()
array_unique($var);
array_unique()函数的作用是删除数组中重复的元素值
数组的排序
<?php
$data = array(1 => "00", 5 => "11", 2 => "22", 4 => "33", 6 => "44");
sort($data); //根据数组的元素值对数组进行升序排列
var_dump($data);
rsort($data); //根据数组的元素值对数组进行降序排列
var_dump($data);
?>
<?php
$data = array(1 => "00", 5 => "11", 2 => "22", 4 => "33", 6 => "44");
ksort($data); //根据数组的键值对数组进行升序排列
var_dump($data);
krsort($data); //根据数组的键值对数组进行降序排列
var_dump($data);
?>
<?php
$data = array(1 => "00", "m" => "11", 2 => "22", "l" => "33", "a" => "44");
asort($data); //保留数组原有的键名和值,对数组的值进行升序排列
var_dump($data);
arsort($data); //保留数组原有的键名和值,对数组的值进行降序排列
var_dump($data);
?>
<?php
//根据“自然排序”法对数组进行排序
$array = ["FILE12.txt","file1.txt","File1.txt","file12.txt","file"];
natsort($array); //普通的"自然排序结果"
var_dump($array);
natcasesort($array); //忽略大小写的"自然排序后结果"
var_dump($array);
?>
<?php
//根据用户自定义的规则对数组排序
$lamp = ["JAVA","MYSQL","PHP","HTML","Git"];
usort($lamp, "length");
var_dump($lamp);
function length($one, $two){
if(long($one) == long($two)
return 0;
else
return (long($one) > long($two)) ? 1 : -1;
}
?>