php的数组
数组的概念
数组:array,数据的组合,指将一组数据(多个)储存到一个指定的容器中,用变量指向该容器,然后可以通过变量一次性得到该容器中所有的数据
数组的定义语法
在php中系统提供多种定义数组的方式
- 使用array关键字:最常用的
$变量 = array(元素1,元素2,元素3);
<?php
//php数组
//定义数组 array
$arr1 = array('1',2,'hello');
var_dump($arr1);
?>
- 可以使用中括号来包裹数据
$变量 = [元素1,元素2,...];
<?php
//定义一个数组[]
$arr1 = ['1',2,'hello'];
var_dump($arr1);
?>
- 隐形定义数组:给变量增加一个中括号,系统自动变成数组
$变量[] =值1; //如果不提供下标也可以,系统自动生成(数字,从0开始)
$变量[下标] = 值;//中括号里面的内容称之为下标key,该下标可以是字母(单词)或者数字,与变量命名的规则相识
<?php
//隐形数组
$arr[] = 1;
$arr[10]=100;
$arr[]='1';
$arr['key']='key';
$arr[1] = '2';
var_dump($arr);
?>
php数组特点
- 可以整数下标或者字符串下标
如果数组下标都为整数:索引数组;
如果数组下标都为字符串:关联数组
- 不同下标可以混合存在:
混合数组
- 数组元素的顺序以放入顺序为准,跟下标无关
<?php
//隐形数组
$arr[] = 1;
$arr[10]=100;
$arr[]='1';
$arr['key']='key';
$arr[1] = '2';
var_dump($arr);
?>
- 数字下标的自增长特性:
从0开始自动增长,如果中间手动出现比较大的,那么后面的自增长元素从最大的值+1开始
- 特殊下标的自动转换
布尔值: true和false
空:NULL
//下标转换
$arr4[false]=false;
$arr4[true]=true;
$arr4[NULL]=NULL;
var_dump($arr4);
- php中数组元素没有类型限制
- php中数组元素没有长度限制
补充:php中数组是很大的数据,所以储存位置是堆区,为当前数组分配一块连续的内存。
多维数组
多维数组:数组里面的元素又是数组
二维数组
二维数组:数组中所有的元素都是一维数组
//print_r是PHP中的一个函数,用于打印变量的信息(包括对象和数组)。使用print_r可以将变量的值、类型和结构以可读的方式输出到浏览器或命令行。
<?php
//多维数组
//定义二维数组
$info = array(
array('name'=>'Jim','age'=>30),
array('name'=>'Tom','age'=>28),
array('name'=>'Lily','age'=>20)
//最后一个元素,后面可以跟逗号不影响(不建议)
);
echo"<pre>";
print_r($info);
?>
多维数组
在第二维的数组元素中可以继续是数组,在php中没有唯独限制(php本质斌没有二维数组)
但是不建议使用超过三维数组,会增加访问的复杂度,降低访问效率。
异性数组(不规则数组)
异性数组:数组中的元素不规则,有普通基本变量也有数组。
在实际开发中,并不常用,尽量让数组元素规则化(便于进行访问)
遍历数组
遍历的基本含义
数组遍历:普通数组数据的访问都是通过数组元素的下标来实现访问,如果说数组中所有的数据需要依次输出出来,就需要我们使用到一些简化的规则来实现自动获取下标以及输出数组元素
//二维数组
$arr = array(0=>array('name'=>'Tom'),1=>array('name'=>'Jim'));
//访问一维数组 ; $arr[一维数组下标]
$arr[0]; //结果:array['name'=>'Tom'];
//访问二维数组: $array[一维数组下标][二维数组下标]
$arr[1]['name'] //结果:Jim
//
foreach遍历语法
基本语法如下:
foreach($数组变量 as[$下标 =>值]){
//通过$下标访问元素的下标;通过$值访问元素的值
}
通常:如果是关联数组(字母下标),就需要下标,如果是数字下标就直接访问值
<?php
//php数组遍历:foreach
//定义数组
$arr = array(1,2,3,4,5,6,7);
//foreach循环
foreach($arr as $k=>$v){
//$v随意命名
echo 'key:',$k,'==value:', $v,'<br/>';
}
?>
在进行数据储存定义的时候,通常二维数组不会两个维度的key下标都为数字,一般是一维数字(无意义),二维为字符串(数据库表字段),所以在进行遍历的时候,通常是只需要针对一维数组进行遍历,取得二维数组元素,然后二维数组元素通过鞋标去访问。
$arr = array(
0=>array('name'=>'Tom','age'=>30),
1=>array('name'=>'Jim','age'=>28)
);
//通常foreach遍历一维数组
foreach($arr as $value){
//1. 可以继续遍历:增加foreach遍历$value
//2.可以使用下标访问
//var_dump($value);
echo 'name is : ',$value['name'],'and age is :',$value['age'],'<br>';
}
foreach 遍历原理
foreach 遍历原理:本质是数组的内部有一颗指针,默认是指向数组元素的第一个元素,foreach就是利用指针去获取,同时移动指针
foreach($arr as $k=>$value){
//循环体
}
- foreach 会重置指针:让指针指向第一个元素;
- 进入foreach循环:通过指针取得当前第一个元素,然后将下标取出然后放到对应的下标变量中(如果存在),将值取出来放到对应的值变量中去。(指针下移)
- 进入到循环体内部(循环体),开始执行;
- 指针下移(本质是在第二步之后,进入循环体之前);----【重复第二步和第三步,直到在第二步的时候遇到指针取不到内容(指针指向数组最后)】
for循环遍历数组
for循环:基于已知边界条件(起始和结束)然后有条件的变化(规律)
因此:for循环遍历数组有对应条件
- 获取数组长度:count(数组)得到数组元素的长度
- 要求数组元素的下标是规律的数字
<?php
//for循环遍历数组
//数组特点:索引数组,下标规律
$arr = array(1,2,3,4,5,6,7);
for($i = 0;$i<count($arr);$i++){
echo 'key is : ',$i,'and value is : ',$arr[$i],'<br>';
}
?>
数组相关的函数
- 排序数组(对数组元素进行排序),比如:
sort() //顺序排序(下标重新排列)
<?php
//php数组相关函数
//排序函数
$arr = array(3,1,5,2,0);
echo '<pre>';
print_r($arr);
$sort_arr = sort($arr);
print_r($arr);
?>
rsort() //逆向排序(下标重新排列)
<?php
//php数组相关函数
//排序函数
$arr = array(3,1,5,2,0);
echo '<pre>';
print_r($arr);
rsort($arr);
print_r($arr);
?>
asort() //顺序排序(下标保留)
<?php
//php数组相关函数
//排序函数
$arr = array(3,1,5,2,0);
echo '<pre>';
print_r($arr);
asort($arr);
print_r($arr);
?>
arsort() //逆向排序(下标保留)
<?php
//php数组相关函数
//排序函数
$arr = array(3,1,5,2,0);
echo '<pre>';
print_r($arr);
arsort($arr);
print_r($arr);
?>
ksort() //顺序排序(按照键名(下标))
<?php
//php数组相关函数
//排序函数
$arr = array(3,1,5,2,0);
echo '<pre>';
ksort($arr);
print_r($arr);
?>
kesort() //逆向排序
<?php
//php数组相关函数
//排序函数
$arr = array(3,1,5,2,0);
echo '<pre>';
krsort($arr);
print_r($arr);
?>
shuffle() //随机打乱数组元素
<?php
//php数组相关函数
//排序函数
$arr = array(3,1,5,2,0);
echo '<pre>';
print_r($arr);
shuffle($arr);
print_r($arr);
shuffle($arr);
print_r($arr)
?>
- 指针函数:比如
reset() //重置指针,将数组指针回到首位
end() //重置指针,将数组知道最后一个元素
next() //指针下移,取得下一个元素的值
prev() //指针上移,取得上一个元素的值
current() //获取当前指针对应的元素值
key() //获取当前指针对应的下标值
$arr = array(3,1,5,2,0);
//指针函数
echo current($arr),'<br>';
echo key($arr),'<br>';
- 其他函数,比如L:
count()tongji
array_push()在数组最后面添加
array_pop()在数组最后面删除
array_reverse()数组反转
in_array()判断某个值是否在数组中存在,(返回值布尔型)
array_keys()获取函数键值
array_values()获取函数值
array_unique()去重
- 预定义数组(预定于函数必须大写):
包含了来自WEB服务器,客户端,运行环境和用户输入的数据 ;这些数组比较特别 全局范围内自动生效,都可以直接使用这些数组 ;用户不能自定义这些数组,但这些数组的操作方式和自己定义的数组操作的方式一样;.在函数中直接可以使用这些数组
$_SERVER:变量由Web服务器设定或者直接与当前脚本的执行环境关联 $_ENV:执行环境提交至脚本的变量
$_GET:经由URL请求提交至脚本的变量
$_POST:经由HTTP POST方法提交至脚本变量
$_REQUESRT:经由GET、POST和Cookie机制提交至脚本的变量,因此该数组并不值得信任
$_FILES:经由HTTP POST文件上传而提交至脚本的变量
$_COOKIE:经由HTTP Cookie方法提交至脚本的变量
$_SESSION:当前注册给脚本会话的变量
$GLOBALS:包含一个引用指向每个当前脚本的全局范围内有效的变量。该数组的键名为全局变量名称
$_SERVER//获取服务器信息